华为上机笔试题

摘要:构建一个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;
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值