目录
C/C++满足条件的3位数
2020年12月 C/C++编程等级考试一级编程题
一、题目要求
1、编程实现
编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为:
1.该数为完全平方数
2.该数至少有2位数字相同
例如,100同时满足上面两个条件。
2、输入输出
输入描述:输入输入一个数n,n的大小不超过实际满足条件的3位数的个数。
输出描述:输出为第n个满足条件的3位数(升序)
输入样例:
1
输出样例:
100
二、算法分析
- 从给定题目的初步分析可以看出,首先需要从键盘获取一个整数
- 可以使用int类型进行变量的声明,用来保存键盘输入的数据
- 题目告知这个数是一个完全平方数,那我们可以换种思路,哪些数字的完全平方数是一个三位数,可以得知这个数是10-99
- 接着可以遍历10-99求出对应的完全平方数,然后获取对应每一位的数字,判断他们是否存在两两相等的情况,如果存在将这个数加入到数组中
- 最后只要输出数组中第n项也就是,题目的第n个符合要求的数
三、程序编写
#include<iostream>
using namespace std;
int num[91];
int main()
{
int n,count=1;
cin>>n;
for(int i=10;i<=99;i++)
{
int a,b,c,k;
k = i * i;
a = k / 100;
b = k / 10 % 10;
c = k % 10;
if((a == b ) || (a == c) || (b == c))
{
num[count] = k;
count ++;
}
}
cout<<num[n];
return 0;
}
四、程序说明
- 根据题目要求声明2个整形int变量(n表示输入的第几个数字,count用来作为数组的小标从1开始)
- 同时在主函数外面声明一个整形数组num,大小占用91个
- 然后利用输入流对象cin,从键盘读取变量n的值
- 接着利用for循环,从10到99,在for循环里面声明4个临时变量(abc分别代表百位十位和各位,k表示这个数的完全平方数)
- 分别求出数字k对应的a b c值,并利用if条件判断语句判断是否存在两两相等的情况
- 如果存在将k加入到数组num中,同时count++
- 最后利用输出流对象cout,输出数组num中第n项的值即可
五、运行结果
1
100
6
441
六、考点分析
难度级别:中等,这题相对小朋友们而言还是有一点难度的,具体主要考查如下:
- 分析题目,找到解题思路
- 变量的声明和使用、数组的声明和使用
- 输入流对象cin的使用,与流提取运算符 >>结合使用从键盘读取想要的数据
- 如何实现完全平方数存在两个相同的数字
- for循环的使用,知道循环次数的时候推荐使用
- if条件判断语句,满足一定条件才能执行后面的语句
- 输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 充分掌握变量、数组的定义和使用,条件判断语句,循环语句和简单算法知识的使用
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!