第4章作业3
第一题
第一个完全数(100分)
题目内容:输入一个正整数n,求大于n的第一个完全数。所谓完全数是指该数刚好等于它的因子之和(自己本身除外)。例如,6的因子为1,2,3,且6=1+2+3,因此6是一个完全数。
输入格式:
输入一个正整数n,1<=n<=8000
输出格式:
输出大于n的,最小的那个完全数
输入样例:
20
输出样例:
28
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n >= 1 && n <= 8000) {
int num = n + 1;
while (true) {
int sum = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0) sum += i;
}
if (num == sum) {
cout << num;
break;
}
num++;
}
}
return 0;
}
第二题
方程x^2 + y^2=n的正整数解(100分)
题目内容:求方程x2+y2=n的所有正整数解。输入正整数n,若方程有正整数解,则输出x和y的所有正整数解,若无正整数解,则输出“No result”。(提示:可用双重循环分别控制x和y最终得出解。)
输入格式:
输入正整数n(n<100000)
输出格式:
若方程有正整数解,则依次输出x和y的所有正整数解答(y>=x),若无正整数解,则输出“No result”。
输入样例:
2080
输出样例:
1212+4444=2080
2828+3636=2080
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
bool flag = true;
int n;
cin >> n;
if (n < 100000) {
for (int i = 1; i < sqrt(n); i++) {
for (int j = 1; j < sqrt(n); j++) {
if (i * i + j * j == n && i < j) {
cout << i << "*" << i << "+" << j << "*" << j << "=" << n << endl;
flag = false;
}
}
}
if (flag != false) cout << "No result";
}
return 0;
}
第三题
买啤酒(100分)
题目内容:啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,不可借钱、借空瓶或借瓶盖,n块钱可以喝多少瓶?
输入格式:
输入购买啤酒的金额n,n为正整数
输出格式:
输出可以喝到的啤酒瓶数
输入样例:
10
输出样例:
15
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int money;
cin >> money;
int beer = money / 2;
int bottom = beer, cap = beer;
while (cap >= 4 || bottom >= 2) {
int Beer = 0;
Beer += bottom / 2;
bottom = bottom % 2;
Beer += cap / 4;
cap = cap % 4;
bottom += Beer;
cap += Beer;
beer += Beer;
}
cout << beer;
return 0;
}