c语言假币问题的编程,假币问题 (C语言代码)
解題思路:/*
將硬幣平均分成三堆:A,B,C,若不能平分,則需保證A,B兩堆必須數目相同,且A,B的數量要比C多,
其中AB用于稱重比較
對于一次稱重,若A?==?B,則假幣在C,若A?!=?B,則,假幣在輕的那堆。
然后對假幣所在的那堆,繼續分三堆處理……
直到找到假幣
注意:雖然分兩堆,也能找到假幣,但顯然需要稱重的次數要比分三堆的次數多一些,不符合題目要求。
A,B的數量要比C多,是為了保證算法的正確性,比如?N?=?8,可分成,2?2?4?或者?3?3?2。
若按照?3?3?2分堆,則總共需要稱重2次,若分成2?2?4分堆,則總共需要稱重3次,顯然不是最優解。
*/
參考代碼:#include?
long?chengzhongcishu(long?n);
int?main(void){
long?n;
while(1){
scanf("%ld",&n);
if(n?==?0)?break;
else?{
printf("%ld\n",chengzhongcishu(n));
}
}
return?0;
}
long?chengzhongcishu(long?n){
long?cishu?=?0;
if(n?==?1)?return?0;
else?if(n?==?2?||?n?==?3)?return?1;
else?{
cishu++;
while(n>3){
if(n?%?3?==?0){
n?=?n/3;
cishu++;
}else?{
n?=?n/3?+1;
cishu++;
}
}
return?cishu;
}
}
總結
以上是生活随笔為你收集整理的c语言假币问题的编程,假币问题 (C语言代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国通胀真相:美国向全球转嫁经济调整成本
- 下一篇: 书摘---创业36条军规7:业务的五个问