[Arrays]D. Liang 6.28 纸牌游戏

作业记录:
Description
桌子上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌。

Input
第一行为一个整数t(0<t<20),表示测试用例个数。以下t行每行包含一个整数n(0<n<40),为一个测试用例的牌数。 如: 1 7

Output
为每个测试用例单独输出一行,该行中依次输出每次掷出的牌的编号以及最后剩下牌的编号,每个牌编号后跟着一个空格。 如: 1 3 5 7 4 2 6(空格)

#include<stdio.h>
void card(int n){
	int cards[n];
	//学校编译器不支持直接全部赋值所以走个循环给卡牌赋值 
	for(int i=0;i<n;i++){
		cards[i]=i+1; 
	} //题目说将牌放在底下,不过我是置顶了
	int i=-2;
	for(int t=0;t<n;t++){
		i+=2;
		printf("%d ",cards[i]);
		//扔完一张,下一张直接置顶 
		//如果扔完一轮了,这里要分奇偶两种情况调整 
		if(i+2>n)i=-1;
		if(i+2<=n)cards[t]=cards[i+1];
		if(i+2==n)i=-2;	
		}//这里搞个图解可能更清晰
	}//但是这里不方便画图
	//可以按奇偶两种情况自己举个例子试试
int main(){
	int t;
	scanf("%d",&t);
	int n[t];
	for(int i=0;i<t;i++){
		scanf("%d",&n[i]);
		card(n[i]);
		printf("\n");
	}
	return 0;
}

如果有可以改进的欢迎评论指出,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值