【小韦同学@神犇营-my1001-抽奖活动】
题目:
描述
码猿星球需要举行一次抽奖活动,抽奖规则如下:
抽奖号码在100到999之间,任何两个号码都不重复。给定一个数n(n是2到9之间的整数),将抽奖号码每一位的三次方加起来得到一个数sum,如果这个抽奖号码的个位是n,或者sum是n的倍数,则这个号码就中奖了。
请你用写一个程序,算一算有多少人中奖了,最大的中奖号码是多少。
输入
输入仅一行,为一个2到9之间的整数。
输出
输出为两行,第一行为中奖人数,第二行为最大的中奖号码。
输入样例1
9
输出样例1
306
999
题解:
/*********************************************************************
* 题目:神犇营-my1001-抽奖活动
* 作者:小韦同学
* 邮箱:weichangying_wcy@163.com
* 题解:
思路:枚举抽奖号码100到999,求得每一个号码的每一位三次方的和sum,
判断这个抽奖号码的个位是否为n,或者sum是n的倍数,若满足,计
数器加1,更新最大值。
注意:1°判断抽奖号码的个位是否为n,而不是sum。
2°从小到大枚举,符合条件时更新最大值,最后即可得到最大值,
不需要用到max函数。
*********************************************************************/
#include <iostream>
using namespace std;
bool check(int x, int n) {
if (x % 10 == n){ // 判断x个是否为n位
return true;
}
int a = x % 10; // 个位
int b = x / 10 % 10; // 十位
int c = x / 100; // 百位
int sum = a * a * a + b * b * b + c * c * c;
if (sum % n == 0){ // 判断和是否为n的倍数
return true;
}
return false; // 前面两种情况都不是,则返回false
}
int main() {
int n;
cin >> n;
int cnt = 0, MAX = -1; // 计数器,最大号码
for (int i = 100; i < 1000; i++) { // 枚举每个抽奖号码
if (check(i, n)) {
cnt++;
MAX = i;
}
}
cout << cnt << endl << MAX;
return 0;
}
我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:weichangying_wcy@163.com