趣味编程
用C语言实现:有一叠n张卡片,从上到下依次编号为1~n,从最上面的一张开始按如下的顺序进行操作:把最上面的第一张卡片拿掉,把下一张卡片放在这一叠卡片的最下面;再把最上面的...
用C语言实现:
有一叠n张卡片,从上到下依次编号为1~n,从最上面的一张开始按如下的顺序进行操作:把最上面的第一张卡片拿掉,把下一张卡片放在这一叠卡片的最下面;再把最上面的依次重复这样做,直到手中剩下一张卡片。
要求:输入不同的n,能输出剩下的这张卡片是原来n张卡片的第几张。(至少一种算法,两种算法有加分)
最好可以附上说明
真的不还意思,只有40分 展开
有一叠n张卡片,从上到下依次编号为1~n,从最上面的一张开始按如下的顺序进行操作:把最上面的第一张卡片拿掉,把下一张卡片放在这一叠卡片的最下面;再把最上面的依次重复这样做,直到手中剩下一张卡片。
要求:输入不同的n,能输出剩下的这张卡片是原来n张卡片的第几张。(至少一种算法,两种算法有加分)
最好可以附上说明
真的不还意思,只有40分 展开
1个回答
展开全部
先定义一个数组,存储原来的数据,从数组的第一位开始,每拿掉一张,就把该位置零,下一位与最后一位掉换,其余位向前覆盖,直到直剩一张为止.
#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编译通过,希望能帮到你.
#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编译通过,希望能帮到你.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |