一打A-K扑克牌,重复如下操作:
(1)将第一张放到最下面
(2)将第一张牌拿出,并展示。
问:如何排列此堆扑克牌,使扑克牌依次按A到K的顺序展示出来?
以下是54张时,输出按红方黑梅A-K的顺序展示的排列结果。
#include <stdio.h>
#include <stdlib.h>
#define N 54
void 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");
}
}
因为我是一个性子比较慢的人,时间一个小时,压根就没有读到此题,后来面试时,面试官问我,我说没时间,他就让我现场给写一下,当时一紧张,思路全乱套了,说的一塌糊涂。所以就挂掉了,故在此将其列出,以供后来勤奋的、有缘看到的同学有所准备,或者共同学习。如果有更好的想法,可以共同探讨。。。