1.计蒜客 回文数字
题目描述
观察数字:123211232112321,123321123321123321
都有一个共同的特征,就是无论从左到右读还是从右向左读,都是相同的。这样的数字叫做 回文数字。现在要从5 位或 6 位的十进制数字中找出各个数位之和等于 n 的回文数字。
输入格式
输入一个整数 n(10≤n≤100)。
输出格式
输出所有各个数位之和等于 n 的 5 位和 6 位整数,每个数字占一行,数字按从小到大的顺序排列。如果没有满足条件的数字,则输出 −1。
样例输入
48
样例输出
699996
789987
798897
879978
888888
897798
969969
978879
987789
996699
代码如下
#include<bits/stdc++.h>
using namespace std;
int digit[6];
int n;
bool judge(int x)
{
int m = 0,sum = 0;
while(x){
digit[m++] = x%10;
sum += x%10;
x /= 10;
}
if(sum != n) return false;
for(int i = 0;i<m/2;i++){
if(digit[i] != digit[m-1-i]){
return false;
}
}
return true;
}
int main()
{
bool f = false;
cin >> n;
for(int i=10000;i<1000000;i++){
if(judge(i)){
cout << i << endl;
f = true;
}
}
if(!f){
cout << -1 << endl;
}
return 0;
}
2.蓝桥杯 生日蜡烛
问题描述
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
从常识来讲一个人的年龄不可能超过200岁
答案: 26
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=1; i<= 200 ;i++){
int can = 0 ,j = i;
while(can < 236 && j <= 200){
can += j;
j++;
}
if(can == 236){
cout << i << " " << j-1 << endl; //现在某君多大
}
}
return 0;
}
3.蓝桥杯 奖券数目
问题描述
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
**答案:**52488
代码如下
#include<bits/stdc++.h>
using namespace std;
bool judge(int x)
{
while(x){
if(x%10==4){
return true;
}
x /= 10;
}
return false;
}
int main()
{
int n,m,cnt = 0;
cin >> n >> m;
for(int i=n;i<=m;i++){
if(!judge(i)){
cnt++;
}
}
cout << cnt;
return 0;
}
4.计蒜客 – 方程的解
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int a = 1; a * a <= n; a++){
for(int b = a+1; a * a + b * b <= n; b++){
for(int c = b+1; a * a + b * b + c * c <= n; c++){
if(a * a + b * b + c * c == n ){
cout << a << " " << b << " " << c << endl;
}
}
}
}
return 0;
}
5.计蒜客 – 四平方和
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和。如果把 00 包括进去,就正好可以表示为四个数的平方和。
比如:
5=0^2+0 ^2+1 ^2+2 ^2
7=1^2+1 ^2+1 ^2+2 ^2
则对于一个给定的正整数 n,可以表示为:
n = a^2 + b^2 + c^2 + d^2你需要求出 字典序 最小的一组解 a,b,c,d
字典序大小:从左到右依次比较,如果相同则比较下一项,直到有一项不同,较小的一方字典序更小,反之字典序更大,所有项均相同则二者字典序相同。
输入格式
程序输入为一个正整数N(1≤N≤5000000)。
输出格式
输出四个非负整数 a,b,c,d中间用空格分开。
样例输入1
5
样例输出1
0 0 1 2
样例输入2
12
样例输出2
0 2 2 2
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,d;
cin >> n;
for(int a = 0;a*a <= n; a++){
for(int b = 0; a*a + b*b <= n; b++){
for(int c = 0; a*a + b*b + c*c <=n;c++){
d = sqrt(n - a*a -b*b - c*c);
if(a*a + b*b + c*c + d*d ==n){
cout << a << b << c << d << endl;
return 0;
}
}
}
}
return 0;
}