十二个小球三次称量源代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define standard_weight 1 //定义标准球重量为1

int ball_array[13];
int unstandard_weight;
int random_num; //以随机数来确定非标准球号码

void Input();
void weigh_compare(); //模拟称量比对
int Random(); //产生随机数
int sum_height(int first_num,int last_num); //计算first_num到last_num号码的重量之和
int theHigher(int num1,int num2); //比较num1号球和num2号球谁重
int theLighter(int num1,int num2); //比较num1号球和num2号球谁轻

//按要求输入相应数据
void Input()
{
    int isInput=1;

    printf("小球编号设为1-12,以随机数方式确定非标准球的号码.\n");
    printf("通过三次称量比对可找出非标准球,并得出其轻重关系.\n");
    printf("设标准球重量为1,请输入非标准球重量(0表示轻,2表示重):\n");

    while(isInput)
    {
        scanf("%d",&unstandard_weight);
        if(unstandard_weight==0 || unstandard_weight==2)
            isInput=0;
        else
        {
            printf("请按提示输入正确的数字(0或2):");
            fflush(stdin); //刷新标准输入缓冲区,丢弃输入缓冲区里的数据
        }
    }
}

//模拟称重进行比对并得出结论
void weigh_compare()
{
    for(int i=0;i<12;i++)  //初始化各球的重量
        ball_array[i]=standard_weight;
    random_num=Random();  //产生非标准球
    ball_array[random_num]=unstandard_weight;

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)==sum_height(5,8)) //相等则表示非标准球在(9,10,11,12)中
    {
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)==sum_height(9,11)) //相等则表示(9,10,11)为标准球,那么12就是非标准球
        {
            printf("非标准球编号为12,");
            //第三次称量(1)vs(12),得出重球还是轻球
            if(theHigher(ball_array[0],ball_array[11])==ball_array[11])
                printf("且为重球\n");
            else
                printf("且为轻球\n");
        }
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)>sum_height(9,11)) //大于则表示(9,10,11)其中一个为非标准球,且确定为轻球
        {
            //第三次称量(9)vs(10)
            if(sum_height(9,9)==sum_height(10,10)) //相等说明11号为非标准球
                printf("非标准球编号为11,且为轻球.\n");
            else
                printf("非标准球编号为%d,且为轻球\n",theLighter(9,10));
        }
        //第二次称量(1,2,3)VS(9,10,11)
        if(sum_height(1,3)<sum_height(9,11))  //小于则表示(9,10,11)其中一个为非标准球,且确定为重球
        {
            if(sum_height(9,9)==sum_height(10,10)) 相等说明11号为非标准球
                printf("非标准球编号为11,且为重球.\n");
            else
                printf("非标准球编号为%d,且为重球\n",theHigher(9,10));
        }
    }

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)>sum_height(5,8)) //不相等则说明非标准球在(1,2,3,4)和(5,6,7,8)中
    {
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)==sum_height(7,9)) //相等则表示非标准球在(1,2,3)中,且确定为重球
        {
            //第三次称量(1)vs(2)
            if(sum_height(1,1)==sum_height(2,2))
                printf("非标准球编号为3,且为重球\n");
            if(sum_height(1,1)>sum_height(2,2))
                printf("非标准球编号为1,且为重球\n");
            if(sum_height(1,1)<sum_height(2,2))
                printf("非标准球编号为2,且为重球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)>sum_height(7,9)) //大于则表示非标准球在(4,7,8)中
        {
            //第三次称量(7)vs(8)
            if(sum_height(7,7)==sum_height(8,8))
                printf("非标准球编号为4,且为重球\n");
            if(sum_height(7,7)>sum_height(8,8)) //由(sum_height(1,4)>sum_height(5,8)知道为轻球
                printf("非标准球编号为8,且为轻球\n");
            if(sum_height(7,7)<sum_height(8,8))
                printf("非标准球编号为7,且为轻球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)<sum_height(7,9)) //小于则表示非标准球在(5,6)中,且确定为轻球
        {
            //第三次称量(5)vs(6)
            if(sum_height(5,5)>sum_height(6,6))
                printf("非标准球编号为6,且为轻球\n");
            if(sum_height(5,5)<sum_height(6,6))
                printf("非标准球编号为5,且为轻球\n");
        }
    }

    //第一次称量(1,2,3,4)VS(5,6,7,8)
    if(sum_height(1,4)<sum_height(5,8)) //不相等则说明非标准球在(1,2,3,4)和(4,5,6,7)中
    {
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)==sum_height(7,9)) //相等则表示非标准球在(1,2,3)中,且确定为轻球
        {
            //第三次称量(1)vs(2)
            if(sum_height(1,1)==sum_height(2,2))
                printf("非标准球编号为3,且为轻球\n");
            if(sum_height(1,1)>sum_height(2,2))
                printf("非标准球编号为2,且为轻球\n");
            if(sum_height(1,1)<sum_height(2,2))
                printf("非标准球编号为1,且为轻球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)<sum_height(7,9)) //小于则表示非标准球在(4,7,8)中
        {
            //第三次称量(7)vs(8)
            if(sum_height(7,7)==sum_height(8,8))
                printf("非标准球编号为4,且为轻球\n");
            if(sum_height(7,7)>sum_height(8,8)) //由(sum_height(1,4)<sum_height(5,8)知道为重球
                printf("非标准球编号为7,且为重球\n");
            if(sum_height(7,7)<sum_height(8,8))
                printf("非标准球编号为8,且为重球\n");
        }
        //第二次称量(4,5,6)vs(7,8,9)
        if(sum_height(4,6)>sum_height(7,9)) //大于则表示非标准球在(5,6)中
        {
            //第三次称量(5)vs(6)
            if(sum_height(5,5)>sum_height(6,6))
                printf("非标准球编号为5,且为重球\n");
            if(sum_height(5,5)<sum_height(6,6))
                printf("非标准球编号为6,且为重球\n");
        }
    }
    printf("\n");
    if(unstandard_weight==0)
        printf("验证结果: 随机数为%d,您输入的数字为0.\n",random_num+1);
    else
        printf("验证结果: 随机数为%d,您输入的数字为2.\n",random_num+1);
}

int Random()
{
    int random_num;
    srand((int) time(NULL)); //把系统时间作为随机数的种子
    random_num=rand()%11; //0-11随机数
    return random_num;
}

//计算组内球的总重
int sum_height(int first_num,int last_num)
{
    int height=0;
    for(int i=first_num-1;i<last_num;i++)
        height+=ball_array[i];
    return height;
}

//计算两球中较重者
int theHigher(int num1,int num2)
{
    if(ball_array[num1-1] > ball_array[num2-1])
        return num1;
    else
        return num2;
}

//计算两球中较轻者
int theLighter(int num1,int num2)
{
    if(ball_array[num1-1] < ball_array[num2-1])
        return num1;
    else
        return num2;
}

int main(int argc, char* argv[])
{
    Input();
    weigh_compare();
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页