3.1
【问题描述】
编写具有如下原型的函数:bool f(long x);其功能为:若整数 x 仅由偶数字(0、2、4、6、8)组成时(如 x=26480),函数返回 true,否则返回 false(如当 x=22034 时)。并编制主函数对它进行调用。
【输入形式】只能是一个整数数字,中间不能有空格等其他字符;
【输出形式】只输出true或者false,后面不要换行。
【样例输入】48060
【样例输出】true
【样例说明】输入输出时不要带有其他说明文字或符号
#include <iostream>
using namespace std;
bool f(long x)
{
long t;
while (x / 10 > 0)
{
t = x % 10;
if (t % 2 != 0)
return false;
x /= 10;
}
if (x % 2 != 0)
return false;
return true;
}
int main()
{
long n;
cout << "输入一个数:";
cin >> n;
if (f(n))
cout << "true";
else
cout << "false";
return 0;
}
3.2
【问题描述】编写具有如下原型的函数:void find(int i, int n); 实现从 i 开始找起,连续找出 n 个素数并显示在屏幕上。如:实参为10 和 8 后,输出的 8 个素数应为:11,13,17,19,23,29,31,37。
【输入形式】输入两个整数,前一个是查找的起始数字,后一个是指定查找几个素数;
【输出形式】输出指定数量的素数,每个素数后面加一个空格作为分隔符,最后一个数字后面可以有一个空格,但不需要换行。
【样例输入】13 4
【样例输出】13 17 19 23
【样例说明】输出结果中除了题目中说明的空格,不要加其他文字和符号。
#include <iostream>
#include <cmath>
using namespace std;
int isprime(int x)
{
if (x == 1)
return 0;
for (int i = 2; i <= sqrt(x); i++)
{
if (x % i == 0)
return 0;
}
return 1;
}
void find(int i, int n)
{
while (n)
{
if(isprime(i))
{
n--;
cout << i << " ";
}
i++;
}
}
int main()
{
int i;
int n;
cin >> i >> n;
find(i, n);
return 0;
}
3.3
【问题描述】输入正整数start和end,找出从start到end这一区间段内哪一个数n的因子和最大,并将该n及其因子和maxSum作为结果输出。例如,当start=10,end=15时,所求的n应该为12,而maxSum应该为16。
要求:设计函数计算n的因子和,其中因子和为包括1但不包括n本身的所有因子之和。
【输入形式】两个整数,用来指定查找的起始数字和结束数字;
【输出形式】两个整数,中间用一个空格隔开,前一个是因子和最大的数字,后一个是因子和,最后一个数字后面不要有空格和换行。
【样例输入】10 15
【样例输出】12 16
【样例说明】输出不要有多余的空格和换行。
#include <iostream>
using namespace std;
int sum(int x)
{
int sum = 1;
for (int i = 2; i <= x / 2; i++)
{
if (x % i == 0)
sum += i;
}
return sum;
}
int main()
{
int t = 1, star, end;
cin >> star >> end;
int maxSum = sum(star);
for (int j = star; j <= end; j++)
{
if (maxSum < sum(j))
{
maxSum = sum(j);
t = j;
}
}
cout << t << " " << maxSum;
return 0;
}
3.4
【问题描述】编写具有如下原型的函数symm:bool symm(long n);用来判断正整数n是否为“回文数”(正读与反读为大小相同的 数),若是返回true,否则返false。并编写主函数,通过调用 symm,求出n以内所有满足下述特征的m:m和7*m以及3*m*m都 是“回文数”,如1,11,88,.…(因为m=1,7*m=7,3*m*m=3; m=11,7*m=77,3*m*m=363;m=88,7*m=616, 3*m*m=23232;.…)。
【输入形式】搜索范围
【输出形式】输出整数,每个整数后面有一个空格用于分隔,最 后一个整数后可以有一个空格,但不要 换行;
【样例输入】1000
【样例输出】1 11 88 .…..(这里省略了其他数据,不是输出省略号)
【样例说明】不要中文提示和输出。
#include <iostream>
using namespace std;
int fan(int n) //返,即回文数
{
int fan = 0;
while (n > 0)
{
fan = fan * 10 + n % 10;
n = n / 10;
}
return fan;
}
bool symm(long n)
{
if (n == fan(n))
return true;
else
return false;
}
int main()
{
int n;
cin >> n;
for (int m = 1; m < n; m++)
{
if (symm(m) && symm(7 * m) && symm(3 * m * m))
cout << m << " ";
}
return 0;
}
3.5
【问题描述】键盘输入正整数 n,求出n与其反序数x之和并输出。例如,输入2038,n+x = 2038 +8302 =10340,输出应为10340。要求:编写函数实现数据转换成反序数值。
【输入形式】输入一个整数;
【输出形式】输出一个整数;
【样例输入】2038
【样例输出】10340
【样例说明】不要任何输入输出的文字提示。
#include <iostream>
using namespace std;
int fan(int n)
{
int fan = 0;
while (n > 0)
{
fan = fan * 10 + n % 10;
n = n / 10;
}
return fan;
}
int main()
{
int n;
cin >> n;
cout << fan(n) + n;
return 0;
}
3.6
#include <iostream>
using namespace std;
int s(int n)
{
if (n == 10)
return 1;
else
return (s(n + 1) + 1) * 2;
}
int main()
{
int n;
cin >> n;
cout << s(n);
return 0;
}
3.7
#include <iostream>
using namespace std;
int f(int n)
{
int i = 1;
while (i * i < n)
{
i++;
}
return i * i;
}
int main()
{
int n;
cin >> n;
cout << f(n);
return 0;
}