实验四 蛮力法

第1关 百钱百鸡问题

本关任务:用蛮力法编程解决百钱百鸡问题。

百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,要求程序输出所有可行的方法,按公鸡的升序输出,输出格式为:公鸡有a只,母鸡有b只,小鸡有c只,每个输出结果后用空行隔开。(其中 a,b,c分别用具体数据代替)

测试说明

平台会对你编写的代码进行测试,输出结果为正确答案时则通关。

代码文件
#include <stdio.h>

void  main()
{
    /**********  Begin  **********/
    int x,y,z;
    for(x=0;x<=20;x++)
    {
        for(y=1;y<=34;y++)
        {
            for(z=1;z<=100;z++)
            {
                if((100==x+y+z)&&(100==5*x+3*y+z/3.0))
                {
                    printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",x,y,z);
                }
            }
        }
    }

    /**********  End  **********/
}

第2关 数字迷

任务描述

本关任务:根据下面计算,用蛮力法解决数字迷问题,求出由 A、B、C 替代的相乘数字。

 
  1. A B C A B
  2. × A
  3. -------------------
  4. D D D D D D
编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,要求程序输出结果格式为:ABCAB*A=DDDDDD(A、B、C、D 为阿拉伯数字)。

测试说明

平台会对你编写的代码进行测试,输出结果为正确答案时则通关。

代码文件
#include <stdio.h>

void main()
{
    /**********  Begin  **********/
    int A,B,C,D;
    long E,F;
    for(A=3;A<=9;A++)//乘积是6位数,A必须大于2
    {
        for(D=1;D<=9;D++)
        {
            E=D*100000+D*10000+D*1000+D*100+D*10+D;
            if(E%A==0)
            {
                F=E/A;
                if((F/10000==A)&&((F%100)/10==A))
                {
                    if((F/1000)%10==F%10)
                    {
                        printf("%d*%d=%d",F,A,E);
                    }
                }
            }
        }
    }

    /**********  End  **********/
}

第3关 求3个数的最小公倍数

任务描述

本关任务:输入 3 个数 a、b、c, 求这 3 个数的最小公倍数。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:2 4 6

预期输出:2,4,和6的最小公倍数是12

代码文件
#include <stdio.h>

void main()
{
    /***********  Begin  **********/
    int x1,x2,x3,i;
    scanf("%d %d %d",&x1,&x2,&x3);
    i=1;
    while(1){
        if((i%x1==0)&&(i%x2==0)&&(i%x3==0))
        break;
        i++;
    }
    printf("%d,%d,和%d的最小公倍数是%d",x1,x2,x3,i);

    /***********  End  **********/
}

第4关 韩信点兵问题

任务描述

本关任务:求韩信一共有多少兵。

韩信有一队兵,他想知道有多少人,便让士兵排队报数。

  • 按从 1 至5报数,最末一个士兵报的数为 1;

  • 按从 1 至 6 报数,最末一个士兵报的数为 5;

  • 按从 1 至 7 报数,最末一个士兵报的数为 5;

  • 按从 1 至 11 报数,最末一个士兵报的数为 10;

  • 按从 1 至 13 报数,最末一个士兵报的数为 11。

请问韩信至少有多少兵?

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,最终程序输出格式为:士兵最少有X个(X 为具体数据)。

代码文件
#include <stdio.h>

void main()
{
    /**********  Begin  **********/
    for(int n=5;n<=9999;n++){
    if(((n-1)%5==0)&&((n-5)%6==0)&&((n-5)%7==0)&&((n-10)%11==0)&&((n-11)%13==0))
    printf("士兵最少有%d个",n);
    }

    /**********  End  **********/
}

第5关白帽子红帽子问题

任务描述

本关任务:正确输出他们各自所戴帽子的颜色。

厅内有 5 个人,他们均戴着帽子,有白帽子和红帽子。

已知戴白帽子的说真话,戴红帽子的说假话,请从他们各自提供的线索辨别谁戴白帽子,谁戴红帽子。

  • 甲:我看见一个戴白帽子的

  • 乙:我没有看见戴红帽子的

  • 丙:我看见一个戴白帽子的,但不是甲

  • 丁:我没有看见戴白帽子的

  • 戊:我的帽子和丙一样

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,要求程序输出结果按甲乙丙丁戊的顺序分别输出他们所戴帽子的颜色,输出格式为:

 
  1. 甲戴X帽子
  2. 乙戴X帽子
  3. 丙戴X帽子
  4. 丁戴X帽子
  5. 戊戴X帽子

其中 X 代表他们所戴帽子的具体颜色。

测试说明

平台会对你编写的代码进行测试,输出结果为正确答案时则通关。

代码文件
#include <stdio.h>
void main()
{
    /**********  Begin  **********/
    int c1,c2,c3,c4,c5;
    for(int a=0;a<=1;a++)
        for(int b=0;b<=1;b++)
            for(int c=0;c<=1;c++)
                for(int d=0;d<=1;d++)
                    for(int e=0;e<=1;e++)
                        {
                            c1=((b+c+d+e)==1)==a;
                            c2=((a+c+d+e)==4)==b;
                            c3=((b+d+e)==1)==c;
                            c4=((a+b+c+e)==0)==d;
                            c5=(c==e)==e;
                            if(c1&&c2&&c3&&c4&&c5)
                                {
                                    if(a==1)
                                        printf("甲戴帽子\n");
                                    else
                                        printf("甲戴红帽子\n");
                                    
                                    if(b==1)
                                        printf("乙戴白帽子\n");
                                    else
                                        printf("乙戴红帽子\n");

                                    if(c==1)
                                        printf("丙戴白帽子\n");
                                    else
                                        printf("丙戴红帽子\n");

                                    if(d==1)
                                        printf("丁戴白帽子\n");
                                    else
                                        printf("丁戴红帽子\n");

                                    if(e==1)
                                        printf("戊戴白帽子\n");
                                    else
                                        printf("戊戴红帽子\n");
                                }
                        }
    /**********  End  **********/
}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值