h3c笔试题

来源:互联网 发布:中国历年gdp数据图表 编辑:程序博客网 时间:2024/05/17 22:57

一打A-K扑克牌,重复如下操作:

(1)将第一张放到最下面

(2)将第一张牌拿出,并展示。

问:如何排列此堆扑克牌,使扑克牌依次按A到K的顺序展示出来?

以下是54张时,输出按红方黑梅A-K的顺序展示的排列结果。

#include <stdio.h>#include <stdlib.h>#define N 54void print(int a[]);int main(int argc, char *argv[]){  int a[N];//存储数据   int num=0;  int flag=1;//间隔的写入   int i;  for(i=0;i<N;i++)a[i]=-1;   while(1)  {    for(i=0;i<N;i++)//for循环为核心代码     {      if(-1==a[i])//如果该位置未写入数据         if(1==flag)//无间隔           flag=0;        else{          a[i]=num;//写入           flag=1;//设置间隔           num++;//要写入的值增加         }    }            if(N==num)break;//所有的值已写完   } /*  for(i=0;i<N;i++)  {    printf("%-5d ", a[i]);    if(i%13==12)printf("\n");  }*/  print(a);  system("PAUSE");  return 0;}void print(int a[]){  int i;  int num;  for(i=0;i<N;i++)  {    num=a[i]/13;    switch(num)    {    case 0:         printf("红%-2d ", (a[i]%13 + 1));//左对齐输出,数字站2字符,剩余的一个分隔          break;    case 1:         printf("方%-2d ", (a[i]%13 + 1));         break;    case 2:         printf("黑%-2d ", (a[i]%13 + 1));         break;    case 3:         printf("梅%-2d ", (a[i]%13 + 1));         break;    case 4:         if(a[i]%13)printf("%-5s", "大王");//上面一共是5个字符          else printf("%-5s", "小王");         break;    default:          printf("系统错误");         return;     }    if(i%13==12)printf("\n");  }     }
因为我是一个性子比较慢的人,时间一个小时,压根就没有读到此题,后来面试时,面试官问我,我说没时间,他就让我现场给写一下,当时一紧张,思路全乱套了,说的一塌糊涂。所以就挂掉了,故在此将其列出,以供后来勤奋的、有缘看到的同学有所准备,或者共同学习。如果有更好的想法,可以共同探讨。。。

原创粉丝点击