gandixiwang 发表于 2022-9-10 16:56:17

求助!

本帖最后由 gandixiwang 于 2022-9-10 17:04 编辑

题目是:设有 2n(n<=6)个球队进行单循环比赛,计划在 2n - 1 天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在 2n - 1 天内每个队都与不同的对手比赛。


这是我的运行结果
#include <stdio.h>
#include <string.h>
#define MAX 128
int mistake(int);//判断是否为2的n次方
void catch_allot(int counts,int i,int j);//进行数组元素交换
void getInput(char name[], int num);//输入队伍名称
int counts;

void getInput(char name[], int num)
{
        int i;
       
        for (i = 0; i < num; i++)
        {
                printf("请输入第%d个队伍的名字:", i+1);
                scanf("%s", name);
                getchar();
        }
}

void catch_allot(int counts,int i,int j)
{
        if(i>2)//如果i大于二就再次进入循环
        {
                catch_allot(counts,i/2,j);
        }
       
        for(int card=0;card<=j;card+=i)//card控制输入范围
        {
                for(int card_0=i/2,card_1=0;card_0<i;card_0++,card_1++)//card_0与card_1控制范围内数组列
                {
                        for(int card_2=i/2,card_3=0;card_3<i;card_2++,card_3++)//card_2与card_3控制范围内数组行
                        {
                                counts=counts;
                                if(card_2==i-1)card_2=-1;//如果刚好在范围线,则初始化为-1
                        }
                }
        }
}

int mistake(int num)
{
        if (num & num - 1 || num<1 || num>64)
        {
                printf("参数队伍的数量必须是2的N次方!且不大于64\n");
                printf("请重新输入:");
                return 1;
        }
        else
        {
                return 0;
        }
}
int main(void)
{
        int i,j;
        int num;
        printf("请输入参赛队伍数量:");
        scanf("%d",&num);
        setbuf(stdin,NULL);
        while(mistake(num))
        {
                scanf("%d",&num);
                setbuf(stdin,NULL);
        }
       
        for(i=0;i<num;i++)
        {
                counts=i+1;
        }
        //排列比赛顺序
        char name;
        getInput(name,num);
        catch_allot(counts,num,num);//输入二维数组和数组内拥有的元素的个数
        //counts=二维数组,num=数组内拥有的元素的个数
        printf("比赛安排如下\n");
        printf("队伍");
        for (i = 1; i < num; i++)
        {
                printf("\t第%d天", i);
        }
        putchar('\n');
        //查看排列后的比赛顺序
        for (i = 1; i <= num; i++)
        {
                for (j = 1; j <= num; j++)
                {
                        printf("%s\t", name-1]);
                }
                putchar('\n');
        }
        return 0;
}
这是我的代码



这是用小甲鱼的程序运行的结果
#include <stdio.h>

#define MAX_NUM 64

int schedule;

void getInput(char name[], int num);
int arrange(int begin, int num);

void getInput(char name[], int num)
{
        int i;
       
        for (i = 0; i < num; i++)
        {
                printf("请输入第%d个队伍的名字:", i+1);
                scanf("%s", name);
                getchar();
        }
}

int arrange(int begin, int num)
{
        int i, j;
       
        if (num == 2)
        {
                schedule = begin;
                schedule = begin + 1;
                schedule = begin + 1;
                schedule = begin;
                return 0;
        }
       
        arrange(begin, num/2);
        arrange(begin + num/2, num/2);
       
        for (i = begin + num/2; i < begin + num; i++)
        {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
        }
       
        for (i = begin; i < begin + num/2; i++)
        {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
        }
}

int main(void)
{
        int num, i, j;
       
        printf("请输入参赛的队伍数量:");
        scanf("%d", &num);
       
        // 检查num是否2的N次方
        // 注意,这里是&,不是&&
        // &是按位与操作,1&1==1,0&1==0,0&0 == 0
        if (num & num - 1)
        {
                printf("参数队伍的数量必须是2的N次方!\n");
                return -1;
        }
       
        char name;
       
        getInput(name, num);
       
        arrange(1, num);
       
        printf("\n比赛安排如下:\n");
        printf("队 伍");
       
        for (i = 1; i < num; i++)
        {
                printf("\t第%d天", i);
        }
       
        putchar('\n');
       
        for (i = 1; i <= num; i++)
        {
                for (j = 1; j <= num; j++)
                {
                        printf("%s\t", name-1]);
                }
                putchar('\n');
        }
       
        return 0;
}

这是小甲鱼的代码

我找疯了都找不到哪里影响了输出。。。


ps:结果那里我是做完没问题的了,就是输出时把数字替换成中文后就只能显示一个中文字符了。
而小甲鱼输出中文字符就没问题,可以完整显示

jhq999 发表于 2022-9-10 21:23:16

去掉setbuf(stdin,NULL);
页: [1]
查看完整版本: 求助!