有1023发子弹 要提前装道10箱子里面,接收键盘输入,要取多少颗子弹数,只能显示整箱的个数,问这10个箱子怎么装(定义一个数组10个元素,分别装子弹的个数,比如取走100发子弹 程序运行结果,比如2箱)
// 有1023发子弹 要提前装道10箱子里面,接收键盘输入,要取多少颗子弹数,只能显示整箱的个数,问这10个箱子怎么装(定义一个数组10个元素,分别装子弹的个数,比如取走100发子弹 程序运行结果,比如2箱)
/*
第一个箱子2^0
依次至
第10个2^9
*/
#include <stdio.h>
int main(){
int a[10] = {0};
int i = 0, sum = 1;
/*
a[10]:十盒子弹 sum:一盒所装子弹数
*/
for (i = 0; i < 10; i++){ // 第一盒装1颗子弹,所以a[0] = 1
a[i] = sum;
sum = sum * 2; // 下一盒子弹是上一盒的2倍
}
for (i = 0; i < 10; i++){
printf("第%d盒子弹数:%d\n", i + 1,a[i]);
}
int n = 0, box = 0;
printf("取子弹:");
scanf("%d", &n);
/*
n:取的子弹数,box:取出的盒数
循环从大到小,子弹从多到少
n >= a[i] 取的子弹大于该盒的子弹数,取该盒
n < a[i] 取的子弹小于该盒的子弹数,则不取,跳出该次循环
*/
for (i = 9; i >= 0; i--){
if (n >= a[i]){
n = n - a[i];
box++;
}
else if (n < a[i]){
continue;
}
}
printf("取%d盒\n", box);
return 0;
}