C语言----洗牌算法

题解:

1,定义两个指针,一个指向第一份牌,一个指向第二份牌

2,通过空格统计牌数

3,根据牌数的奇偶数来确定要偏移的位数,从而来确定第二份牌指针的位置

4,交替打印两个指针所指向的字符

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>

int main()
{
    // please write your code here
    char cardArr[200] = {0};
    gets(cardArr);
    
    char *ptFirst  = cardArr;
    char *ptSecond = NULL;
    
    int carNum = 0;
    int i = 0;
    int pianyi = 0;
    int k = 0;
    
    for(i=0; i<strlen(cardArr); i++)
    {
        if(cardArr[i] == ' ')
            carNum++;
    }
    carNum += 1;
    if(carNum % 2 == 0)
        pianyi = carNum/2;
    else
        pianyi = carNum/2 + 1;
    i = 0;
    for(i=0; i<strlen(cardArr); i++)
    {
        if(cardArr[i] == ' ')
            k++;
        if(k == pianyi)
        {
            ptSecond = &cardArr[i+1];
            break;
        }
    }
    char *ptFirstEnd = ptSecond -1;
    while(ptFirst < ptFirstEnd)
    {
        ptFirst[2] = '\0';
        ptSecond[2] = '\0';
        printf("%s %s ",ptFirst,ptSecond);
        ptFirst += 3;
        ptSecond += 3;
    }
    return 0;
}


版权声明:本文为qq_27071221原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。