枚举练习
1、举例出小于某个数的所有质数
代码
#include<iostream>
using namespace std;
int main()
{
int x;
cin >> x;
int con = 0;
for (int i = 2; i <=x; i++)
{
int xp = i;
bool t = true;
for (int i = 2; i <= xp / 2; i++) {
if (xp % i == 0) {
t = false;
break;
}
}
if (t) {
cout << xp<<endl;
con++;
}
}
cout <<"共计:"<< con;
return 0;
}
代码运行
2、求某数到某数之间中为回文数且每位和为n的数。
示例
- 输入:10000 100000 8(表示10000-100000中每位相加等于8的回文数)
- 输出:
10601
11411
12221
13031
20402
21212
22022
30203
31013
40004
代码
#include<iostream>
using namespace std;
int check(int i ,int p) {
int zhan[20];
int weisum = 0;
while (i)
{
zhan[weisum++] = i % 10;
i /= 10;
}
for (int z = 0; z < weisum/2; z++)
{
if (zhan[z] != zhan[weisum - z - 1]) {
return false;
}
}
int sum = 0;
for (size_t i = 0; i < weisum; i++)
{
sum += zhan[i];
}
if (sum != p) return false;
else return true;
}
int main()
{
int m, n;
cin >> m >> n;
int p;
cin >> p;
for (int i = m; i <=n; i++)
{
if (check(i,p)) {
cout << i<<endl;
}
}
return 0;
}
代码运行
3、避免“不幸运的”4
代码要求
求某个大小区间内中不含有数字“4”的数以及他们数量的总和。
代码
#include<iostream>
using namespace std;
int check(int i) {
while (i) {
if (i % 10 == 4) return false;
i /= 10;
}
return true;
}
int main()
{
int m, n;
cin >> m >> n;//数字区间
int sum = 0;
for (int i = m; i <=n; i++)
{
if (check(i)) {
cout << i<<" ";
sum++;
}
}
cout << endl << "共计:" << sum << "个";
return 0;
}
代码运行
4、四平方定理(拉格朗日定理)
代码要求
四平方定理是指:每个正整数n都能被四个整数表示为:n * n=a * a + b * b + c * c+d * d。我们需要找到一个数它字典序列最小的一个四平方数。
例如 5=0 * 0+0 * 0+1 * 1+2 * 2。
代码
#include<iostream>
#include<cmath>
using namespace std;
//四平方定理(拉格朗日定理)
int main()
{
int x;
cin >> x;
int a, b, c;
double d;
for ( a = 0; a*a <=x ; a++)
{
for (b = a; a * a + b * b <= x; b++)
{
for (c = b; a * a + b * b + c * c <= x; c++)
{
d = sqrt(x - a * a - b * b - c * c);
if (d == (int)d) //判断d是否为一个整数
{
cout << a<<" " << b<<" " << c<<" " << d;
return 0;
}
}
}
}
}
代码运行
590=0+4+225+361
5、寻找最优和
代码要求
输入一系列数,求该序列数中和最大的序列。
示例
-
输入:5
-1 2 -1 2 -1 -
输出:最大和为:3
序列为:2 -1 2
代码
#include<iostream>
#include<cmath>
using namespace std;
//寻找最优和
int shu[1005];
int main()
{
int x;
cin >> x;
for (int i = 0; i < x; i++)
{
cin >> shu[i];
}
int sum, ang = 0;
int xz, yz;
for (int i = 0; i < x; i++)
{
sum = 0;
for (int p = i; p < x; p++)
{
sum += shu[p];
if (sum > ang) {
ang = sum;
xz = i;
yz = p;
}
}
}
cout <<"最大和为:"<< ang<<endl<<"序列为:";
for (int i = xz; i <=yz; i++)
{
cout << shu[i]<<" ";
}
return 0;
}