解题思路:
/* 将硬币平均分成三堆: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 <stdio.h> 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; } }
0.0分
16 人评分
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1008 |
高精度加法 (C++代码)(大数加法)浏览:915 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:458 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:508 |
【数组的距离】 (C语言代码)浏览:728 |
不容易系列 (C语言代码)浏览:664 |
数组输出 (C语言代码)--此题的题目描述有问题浏览:1813 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:512 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1107 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:780 |