为啥第二题过不了

求问大佬们为啥我的第二题死活过不了
我感觉完全对的啊
#include <stdio.h>
#include <stdlib.h>
int cmp(int *a, int *b)
{
    return *a - *b;
}
int cmp2(char *a, char *b)
{
    return (int)*a - (int)*b;
}
struct card
{
    int cnum;
    int *count;
    char *ctype;
    int *jishu;
};
typedef struct card *CARD;
int main()
{
    int num;
    scanf("%d", &num);
    struct card deal[num];
    //读入数字
    for (int i = 0; i < num; i++)
    {
        scanf("%d", &deal[i].cnum);
        getchar();
        deal[i].count = (CARD)malloc(sizeof(int) * deal[i].cnum);
        deal[i].ctype = (CARD)malloc(sizeof(char) * deal[i].cnum);
        deal[i].jishu = (CARD)malloc(sizeof(int) * 11);
        //读入数字
        for (int j = 0; j < deal[i].cnum; j++)
        {
            scanf("%d", deal[i].count + j);
            getchar();
        }
        //读入类型
        for (int j = 0; j < deal[i].cnum; j++)
        {
            scanf("%c", deal[i].ctype + j);
            getchar();
        }
    }

    int times[num];

    int flag = 0;
    //先对数据进行排序,再处理
    for (int i = 0; i < num; i++)
    {

        times[i] = 1;
        qsort(deal[i].count, deal[i].cnum, sizeof(int), cmp);
        qsort(deal[i].ctype, deal[i].cnum, sizeof(char), cmp2);
        for (int j = 0; j < deal[i].cnum; j++)
        {
            deal[i].jishu[deal[i].count[j]]++;
        }
        for (int m = 0; m < 11; m++)
        {
            if (deal[i].jishu[m] == 4)
            {
                flag = 4;
                break;
            }
            else if (deal[i].jishu[m] == 3)
            {
                for (int p = 0; p < 11; p++)
                {
                    if (deal[i].jishu[p] == 2)
                    {
                        flag = 5;
                        break;
                    }
                    flag = 7;
                }
            }
            else if (deal[i].jishu[m] == 2)
            {
                for (int p = 0; p < 11; p++)
                {
                    if (deal[i].jishu[p] == 3)
                    {
                        flag = 5;
                        break;
                    }
                    else if (deal[i].jishu[p] == 2 && p != m)
                    {
                        flag = 8;
                        break;
                    }
                    flag = 9;
                }
            }

            //连续性判断
            if ((deal[i].count[4] - deal[i].count[3] == deal[i].count[3] - deal[i].count[2]) && (deal[i].count[3] - deal[i].count[2] == deal[i].count[2] - deal[i].count[1]) && (deal[i].count[2] - deal[i].count[1] == deal[i].count[1] - deal[i].count[0]))
            {
                if (deal[i].ctype[0] == deal[i].ctype[deal[i].cnum - 1])
                    flag = 2;
                else
                    flag = 6;
            }
        }

        if (deal[i].count[0] == deal[i].count[deal[i].cnum - 1] && deal[i].cnum == 5)
            times[i] = 15000;
        else if (flag == 2)
            times[i] = 8000;
        else if (deal[i].ctype[0] == deal[i].ctype[deal[i].cnum - 1] && deal[i].cnum == 5)
            times[i] = 300;
        else if (flag == 4)
            times[i] = 150;
        else if (flag == 5)
            times[i] = 40;
        else if (flag == 6)
            times[i] = 20;
        else if (flag == 7)
            times[i] = 6;
        else if (flag == 8)
            times[i] = 4;
        else if (flag == 9)
            times[i] = 2;
    }
    for (int i = 0; i < num; i++)
    {
        printf("%d\n", times[i]);
    }

    return 0;
}

全部评论
我也感觉没问题,就是过不了,奇了怪了
1 回复 分享
发布于 2022-03-26 17:12

相关推荐

01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务