解题思路:
定义一个数组存储因子,方便输出
第一个外循环:用于遍历6~输入的范围数
第一个内循环:用于得到因子并存储
第二个内循环:用于求因子之和
第三个内循环:用于判断因子之和是否与外循环里的初值相等,若相等按题目要求输出格式输出
注意事项:
数组元素的个数,由第一个外循环的循环初值的因子数目决定,需要在求因子时自增
后续的循环时,要将下标-1,因为多自增了一次会导致数组越界
满足条件时,因子数的输出之间有空格,且最后没有空格(利用if条件判断体,单独写一个输出语句)
参考代码:
#include <iostream> using namespace std; int main() { int N,list[1000],sum,arr; cin>>N; for(int i=6;i<=N;i++)//第一个外循环 { arr=0; sum=0; for(int j=1;j<=i/2;j++)//第一个内循环 { if(i%j==0) { list[arr]=j; arr++; } } arr=arr-1; for(int k=0;k<=arr;k++)//第二个内循环 { sum=sum+list[k]; } if(sum==i) { cout<<i<<" "<<"its factors are "; for(int z=0;z<=arr;z++)//第三个内循环 { cout<<list[z]<<" "; } cout<<endl; } } return 0; }
0.0分
18 人评分
#include <stdio.h> #include <stdlib.h> int main(void){ int n,i,j; scanf("%d",&n); for(i = 1;i <= n;i++){ int tem = 0; for(j = 1;j < i; j++){ if(i%j==0){ tem+=j; } } if(tem==i){ printf("%d its factors are ",i); for(j = 1;j < i; j++){ if(i%j==0){ printf("%d ",j); } } printf("\n"); } } return 0; } 26行,我的够多了,35行太多了
我跟你想的完全一模一样: #include<bits/stdc++.h> using namespace std; int main() { int a,sum=0; bool tr=0; vector<int> fac; cin>>a; for(int i=6;i<=a;i++) { for(int j=1;j<=i/2;j++) { if(i%j==0) { sum+=j; fac.push_back(j); } } if(sum==i) { tr=1; cout<<i<<" its factors are "; for(int i=0;i<fac.size();i++) { cout<<fac[i]<<" "; } cout<<endl; } sum=0; fac.clear(); }
简单的a+b (C语言代码)浏览:537 |
字符串比较 (C语言代码)答案错误????浏览:596 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:514 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:517 |
求组合数 (C语言代码)浏览:1152 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1162 |
WU-输出正反三角形 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:682 |
Tom数 (C语言代码)浏览:492 |
剪刀石头布 (C语言代码)浏览:1432 |