#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();
}
十二个小球三次称量源代码
最新推荐文章于 2022-06-26 11:34:07 发布