您的位置:首页 > 其它

华为上机笔试题

2015-09-07 23:04 330 查看

摘要:构建一个dos命令行界面的MP3界面,可以输入u,d,l,r四种命令,代表上下左右翻滚,并且当前选择的歌曲由一个[]标记.当输入混合指令如uullr时,按顺序计算最后到达的页面.

基本思路:本题没有什么算法可言,主要是注意细节上的问题,比如界面翻到了第几页,剩下多少首歌,什么时候应该从底翻到顶等等.代码比较杂乱不清,是很久以前的东西了,有时间再修改吧、

// test_kong.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"
#include "string.h"
int _tmain(int argc, _TCHAR* argv[])
{
int n=0,i;
int k = 0;
int m =0;
int t = 1;
int r = 0;
char s[10]={0};
printf("please input the number of songs n =:");
scanf("%d",&n);
for(int i =1;i<=4;i++)
{
if(i==1)
printf("[ ");
if(i==2)
printf("] ");
printf("%d",i);
}
printf("\n");
while(1)
{
printf("please input the command:");
scanf("%s",s);
if (s[0]=='e')
{
printf("MP3 is exited");
break;
}
if(n<=0)
{
printf("there is no song\n");
}
else//n>0
{
if(s[0]!='u'&&s[0]!='d'&&s[0]!='l'&&s[0]!='r')
{
printf("the command is wrong\n");
break;
}
if (n<=4)
{
for ( i =1;i<=n;i++)
{
if(i==1)
printf("[ ");
if(i==2)
printf("] ");
printf("%d  ",i);
}
printf("up or down is unavaiable");
}
else//n>=4
{
m =(n%4!=0?(n/4)+1:(n/4));
k = n % 4;
for( i =0;i<=strlen(s)-1;i++)
{
if (s[i]=='d')
{
r=0;
if(t<m)
t+=1;
else
t = 1;
}
else if (s[i]=='u')
{
r=0;
if(t>1)
t-=1;
else
t +=m-1;
}// u
}// compute up or down
}//n>=4
for( i =0;i<=strlen(s)-1;i++)
{
if (s[i]=='r')
{
if (t==m&&r>=k-1)//r代表当前光标,从0开始算起
{
r = 0;
t = 1;
}
else if(r>=3)
{
t+=1;
r -=3;
}
else
r+=1;
}
if (s[i]=='l')
{
if (t==1&&r<=0)
{
t = m;
r = 0;
}
else if (r<=0)
{
t = t-1;
r+=3;
}
else
r-=1;
}//command : l
}//compute l r
// output
if(t==m)
{
for(int i =1+(m-1)*4;i<=n;i++)
{

if(i==r+1+(m-1)*4)
{
printf("[ ");
printf("%d ",i);
printf("] ");
}
else printf("%d ",i);
}
printf("\n");
}//t==m
else
{
for(int i = 1+(t-1)*4;i<1+t*4;i++)
{
if(i==r+1+(t-1)*4)
{
printf("[ ");
printf("%d ",i);
printf("] ");
}
else printf("%d ",i);
}
printf("\n");
}//t!=m
}// n>0
}//while
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: