日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

假币问题POJ2692

發布時間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 假币问题POJ2692 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路:在本題中,已經明確說明塞利保證在三次稱量后能夠確定假幣,也就是說,輸入的三組稱量數據有唯一的答案。硬幣有三種狀態:較重的假幣、較輕的假幣、真幣。由于只有1枚假幣,且總共只有12枚銀幣,因此可以對所有的情況進行枚舉。假幣可能是任意一枚,故有12種情況;且假幣可能比真幣重,也可能比真幣輕,故有兩種情況。在這全部的24種情況當中,只有一種情況能夠符合三組稱量數據,這就是所要尋找的答案。

? ? ? ? 假設用0、-1和1表示真幣、較輕假幣和較重假幣的重量。分別計算天平左側與右側的重量,若下面三個條件中有一個不滿足,則說明假設不成立,當前的情況與稱量數據矛盾。

? ? ? ?(1)如果天平左側較重,且稱量結果為up。

? ? ? ?(2)如果天平右側較重,且稱量結果為down。

? ? ? ?(3)如果天平左右兩側重量相同,且稱量結果為even。

具體實現時,需要注意以下兩點。

(1)可以使用字符串存儲稱量數據。題目中并沒有說明一定要使用4枚銀幣進行稱量,由于總共有12枚銀幣,天平的一側最多可以有6枚銀幣。

(2)在枚舉的過程中,一旦發現不滿足條件的情況,可以立即跳出循環,繼而枚舉下一枚銀幣;同樣地,一旦發現符合所有稱量數據的情況,可以立即輸出結果。

#include<stdio.h>int status[12]; char left[3][7],right[3][7],result[3][7];//判斷當前的情況是否滿足條件 bool Balanced() {int i,k,leftw,rightw;for(i = 0; i < 3; i++){leftw = rightw = 0;for(k = 0; k <6 && left[i][k] !=0; k++){leftw += status[left[i][k]-'A'];rightw += status[right[i][k]-'A'];}if(leftw > rightw && result[i][0]!='u') //條件1 return false;if(leftw < rightw && result[i][0]!='d') //條件2 return false;if(leftw == rightw && result[i][0]!='e') //條件3 return false; }return true; } int main() {int i,num;scanf("%d",&num);while(num--){for(i = 0; i < 3; i++)scanf("%s%s%s",left[i],right[i],result[i]);for(i = 0; i < 12; i++)status[i] = 0;for(i = 0; i < 12; i++){status[i] = 1; //第i枚硬幣是較重假幣 if(Balanced()) break;status[i] = -1; //第i枚硬幣是較輕假幣 if(Balanced())break;status[i] = 0; //第i枚硬幣是真幣 }printf("%c is the counterfeit coin and it is %s.\n",i+'A',status[i] > 0?"heavy":"light");}return 0; }

?

總結

以上是生活随笔為你收集整理的假币问题POJ2692的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。