C语言:面试题-一副牌从A到K共13张,取牌的顺序是这样的:A、将第一张放到最下面。B、取出最上面的一张牌。。。。

代码如下:

/**************************************************************************
*功能:求解下面问题
*一副牌从A到K共13张,取牌的顺序是这样的
*	A、将第一张放到最下面。
*	B、取出最上面的一张牌。
*依次顺序操作A、B,最后取出牌的顺序是从A到K,请用程序实现13张牌的最初顺序。
*思路:从后面的结果倒推,得到答案
*作者:lml   时间:2020年4月15日20:31:08
***************************************************************************/

#include <stdio.h>
#include <string.h>

int do_poker(char *inbuf)
{
	char tbuf[20]="";
	char a;
	int i=0,j=0,k=0;
	while(*(inbuf+i) != '\0'){
		//从后面倒着走,把牌逐张拿回来
		//这里我们实际放牌是往上放,但是数组是挨个往后放
		//所以最后的顺序需要整体翻转一下
		tbuf[i]=*(inbuf+i);   
		
		//把最后一张牌发到最上面的位置
		while(tbuf[j] != '\0') 
		{
			j++;
		}
		tbuf[j]=tbuf[0];
		tbuf[j+1]='\0';
		for(k=0;k<strlen(tbuf);k++)
		{
			tbuf[k]=tbuf[k+1];
		}
		i++;
	}
	//最后把顺序翻转一下
	j=strlen(tbuf)-1;
	k=0;
	while(j != k){
		a=tbuf[j];
		tbuf[j]=tbuf[k];
		tbuf[k]=a;
		j--;
		k++;
	}
	printf("poker:%s\n",tbuf);
	return 0;
}
int main(int argc, const char *argv[])
{
	char buf[20]={"A23456789BJQK"};//B表示10
	do_poker(buf);
	return 0;
}

结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值