趣味编程

用C语言实现:有一叠n张卡片,从上到下依次编号为1~n,从最上面的一张开始按如下的顺序进行操作:把最上面的第一张卡片拿掉,把下一张卡片放在这一叠卡片的最下面;再把最上面的... 用C语言实现:
有一叠n张卡片,从上到下依次编号为1~n,从最上面的一张开始按如下的顺序进行操作:把最上面的第一张卡片拿掉,把下一张卡片放在这一叠卡片的最下面;再把最上面的依次重复这样做,直到手中剩下一张卡片。
要求:输入不同的n,能输出剩下的这张卡片是原来n张卡片的第几张。(至少一种算法,两种算法有加分)
最好可以附上说明
真的不还意思,只有40分
展开
 我来答
snrbj1988
推荐于2016-09-05 · TA获得超过415个赞
知道小有建树答主
回答量:147
采纳率:100%
帮助的人:149万
展开全部
先定义一个数组,存储原来的数据,从数组的第一位开始,每拿掉一张,就把该位置零,下一位与最后一位掉换,其余位向前覆盖,直到直剩一张为止.
#include <stdio.h>
void main()
{
int a[100];//定义数组
int i,m,n,j,temp;
printf("Enter n:");//输入有多少张
scanf("%d",&n);
if(n==1) printf("the last is:1");//1张2张就直接给出来了
else if(n==2) printf("the last is:2");
else
{
for(i=0;i<n;i++)
{
a[i]=i+1;printf("%3d ",a[i]);//给数组赋值,就相当于编号了
}
printf("\n");
i=0;
do
{
a[i]=0;//拿掉一张,该位置就空了,置为0;
j=i+1;
while(j<n-1)//后位进一,空位的下一位移到最后
{
if(j==i+1) temp=a[j];
a[j]=a[j+1];
if(j==n-2) a[j+1]=temp;
j++;
}

if(a[n-2]==0) break;//还剩一张了
i++;
for(m=0;m<n;m++)//这个循环语句是用来观察每一步,以验证结果
{
if(a[m]==0) continue;
printf("%3d ",a[m]);
}
printf("\n");
}while(1);
printf("The last is:%d\n",a[n-1]);//最后一张的编号
}
}
用TC2.0编译通过,希望能帮到你.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式