C/C++满足条件的3位数 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析-LMLPHP

目录

C/C++满足条件的3位数

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析


C/C++满足条件的3位数

2020年12月 C/C++编程等级考试一级编程题

一、题目要求

1、编程实现

编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为:

1.该数为完全平方数

2.该数至少有2位数字相同

例如,100同时满足上面两个条件。

2、输入输出

输入描述:输入输入一个数n,n的大小不超过实际满足条件的3位数的个数。

输出描述:输出为第n个满足条件的3位数(升序)

输入样例:

1

输出样例:

100

二、算法分析

  1. 从给定题目的初步分析可以看出,首先需要从键盘获取一个整数
  2. 可以使用int类型进行变量的声明,用来保存键盘输入的数据
  3. 题目告知这个数是一个完全平方数,那我们可以换种思路,哪些数字的完全平方数是一个三位数,可以得知这个数是10-99
  4. 接着可以遍历10-99求出对应的完全平方数,然后获取对应每一位的数字,判断他们是否存在两两相等的情况,如果存在将这个数加入到数组中
  5. 最后只要输出数组中第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;
}

四、程序说明

  1. 根据题目要求声明2个整形int变量(n表示输入的第几个数字,count用来作为数组的小标从1开始)
  2. 同时在主函数外面声明一个整形数组num,大小占用91个
  3. 然后利用输入流对象cin,从键盘读取变量n的值
  4. 接着利用for循环,从10到99,在for循环里面声明4个临时变量(abc分别代表百位十位和各位,k表示这个数的完全平方数)
  5. 分别求出数字k对应的a b c值,并利用if条件判断语句判断是否存在两两相等的情况
  6. 如果存在将k加入到数组num中,同时count++
  7. 最后利用输出流对象cout,输出数组num中第n项的值即可

五、运行结果

1

100


6

441

六、考点分析

难度级别:中等,这题相对小朋友们而言还是有一点难度的,具体主要考查如下:

  1. 分析题目,找到解题思路
  2. 变量的声明和使用、数组的声明和使用
  3. 输入流对象cin的使用,与流提取运算符 >>结合使用从键盘读取想要的数据
  4. 如何实现完全平方数存在两个相同的数字
  5. for循环的使用,知道循环次数的时候推荐使用
  6. if条件判断语句,满足一定条件才能执行后面的语句
  7. 输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  8. 充分掌握变量、数组的定义和使用,条件判断语句,循环语句和简单算法知识的使用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

10-31 05:39