代码如下:
/**************************************************************************
*功能:求解下面问题
*一副牌从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;
}
结束。