贷款公司网站模板,网站联盟的收益模式,做网站百度关键排名,wordpress店铺模板制作教程1 完美数
1.1 题目描述
小红定义一个数为“完美数”#xff0c;当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。
小红拿到了一个大小为 n#xff08;2 n 2000#xff09;的数组 a#xff0c;她希望选择数组中的两个元素#xff08;1 …1 完美数
1.1 题目描述
小红定义一个数为“完美数”当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。
小红拿到了一个大小为 n2 n 2000的数组 a她希望选择数组中的两个元素1 a[i] 10^9满足它们的乘积为完美数。 小红想知道共有多少种不同的取法?
输入描述
第一行输入一个整数 n表示数组大小。
第二行输入 n 个整数整数之间用空格隔开表示数组中的元素。
输出描述
输出一个整数表示取法个数。
输入示例
4
25 2 1 16
输出示例
3
提示信息
25 * 2 50 2 * 1 2 25 * 16 400。
1.2 问题分析
问题出口在于如何判断数字是不是完美数
我一开始的想法是每次看数字的最后一位如果它是0就去除如果不是0就判断剩下的数字是否小于10如果小于10也就是说只剩一个非0数字则是完美数如果大于10则不是完美数。
#include iostream
#include vector
using namespace std;bool perfect_num(int num){while(num % 10 0){ // 如果num能被10整除则循环num num / 10; // num去除一个0继续循环}if(num 10) return true;else return false;
}int main(){int n; // 数组的大小cin n;vectorint a(n, 0);for(int i 0; i n; i){cin a[i];}int result 0;for(int i 0; i n; i){for(int j i1; j n; j){if(perfect_num(a[i] * a[j])){result;} }}cout result endl;return 0;
}
但是代码有一个致命错误INT整数相乘会溢出
例如在下面这个测试用例中我第一个数和第二个数的乘积应该是3467832415636345但是我程序中计算出来的是-1488565383。显然和预期结果不一样。 所以一定要把int改成long long下面的代码就对了。
#include iostream
#include vector
using namespace std;bool perfect_num(long long num1, long long num2){long long num num1 * num2;while(num % 10 0){ // 如果num能被10整除则循环num num / 10; // num去除一个0继续循环}if(num 10) return true;else return false;
}int main(){int n; // 数组的大小cin n;vectorint a(n, 0);for(int i 0; i n; i){cin a[i];}int result 0;for(int i 0; i n; i){for(int j i1; j n; j){if(perfect_num(a[i], a[j])){result;} }}cout result endl;return 0;
}
2 可爱串
2.1 题目描述
我们定义子序列为字符串中可以不连续的一段而子串则必须连续。例如 rderd 包含子序列 red”且不包含子串red”因此该字符串为可爱串。
小红想知道长度为 n3 n 10 ^ 5的、仅由 red 三种字母组成的字符串中有多少是可爱串? 答案请对 10 ^ 9 7 取模。
输入描述
输入共一行包含一个正整数 n
输出描述
输出一个正整数代表可爱串的数量
输入示例
4
输出示例
3
提示信息
reed、rerd、rded
2.2 问题分析
好二叉树
题目描述
小红定义一个二叉树为“好二叉树”当且仅当该二叉树所有节点的孩子数量为偶数(0 或者 2)。
小红想知道n1 n 3000个节点组成的好二叉树共有多少种不同的形态?
答案请对 10 ^ 9 7 取模。
输入描述
输入一个正整数 n
输出描述
输出一个正整数代表好二叉树的数量
输入示例
5
输出示例
2