十二個小球三次稱量原始碼
阿新 • • 發佈:2019-01-31
#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();
}