找出200以内所以完数,并输出其因子使用二重循环嵌套,外层循环针对2~200之间的所以数
代码如下:
#include <stdio.h>
int main () {
for(int i = 2; i <= 200; i++) {
int arr[200]; // 存放因数
int k = 0;
int sum = 0;
for(int j = 1;j <= i / 2; j++) {
if (i % j == 0) {
sum += j;
arr[k] = j;
k++;
}
}
if(sum == i) {
// 是完数
printf("%d是一个完数, 它的因数有:", i);
for(int kk = 0; kk < k; kk++) {
printf(" %d ", arr[kk]);
}
printf("\n");
}
}
return 0;
}
参考
#include <stdio.h>
int main() {
for (int i = 2; i <= 200; i++) {
int sum = 0;
printf("%d 的因子有: ", i);
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) {
printf("%d ", j);
sum += j;
}
}
if (sum == i) {
printf(",%d 是完数\n", i);
} else {
printf("\n");
}
}
return 0;
}
外层循环中,遍历2到200之间所有的整数。对于每个整数,通过内层循环查找其因子,并将这些因子加起来。如果总和等于该整数本身,则它就是一个完数。程序输出该整数及其因子,如果该整数为完数,则输出“是完数”,否则只输出换行符。
#include<stdio.h>
int main() {
int i = 0; //循环次数
int j = 1; //假设第五只猴子分的桃子数。(1-255,当为255时满足条件)
int n;
while(i < 5) { //i记录逆推次数,达到5说明for循环执行了5次,找到了满足条件的最小数
n = 4 * j; //n初值为最后剩下的桃子数,然后从n=4,8···寻找满足条件的数
for(i = 0; i < 5; i++) {
if(n % 4 != 0) //后面四只猴子分之前的桃子数必须是四的倍数,因为是前一只猴子剩下的,不满足则退出循环
break;
n = n / 4 * 5 + 1; //一次求第5只猴子分桃子前的桃子数,判断是否是4的倍数
printf("第五只猴子分得桃子为%d个时,剩余桃子数为%d\n",j,n);
}
j++;
}
printf("海滩上原来最少有%d个桃子\n", n);
return 0;
}
法二:
#include <stdio.h>
#include <stdlib.h>
/*
A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
C、D、E依次醒来,也按同样的方法拿鱼。
问他们台伙至少捕了多少条鱼?以及每个人醒来时见到了多少鱼?
*/
int main(){
int n;//至少捕了多少条鱼
int A,B,C,D,E;
for(n=6;;n++){//这个n是一开始总共鱼的数量,最起码得能分成五份还余1吧
A=4*(n-1)/5; //A=(n-1)乘五分之四
B=4*(A-1)/5;
C=4*(B-1)/5;
D=4*(C-1)/5;
if(n%5==1 && A%5==1 && B%5==1 && C%5==1 && D%5==1){ //平均分成5份多一
printf("至少合伙捕鱼:%d条\n",n);
printf("分别见到鱼的条数:%d %d %d %d\n",A,B,C,D);
break;
}
}
return 0;
}