1. 程式人生 > >十二個小球三次稱量原始碼

十二個小球三次稱量原始碼

#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(); }