121.有奖猜谜
模拟
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x=777;
string s="vxvxvxvxvxvxvvx";
for(int i=0;s[i];i++)
{
if(s[i]=='v') x*=2;
else x-=555;
if(x<=0) break;
}
cout<<x;
return 0;
}
答案:58497
122.方程整数解
枚举
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=0;i<100;i++)
for(int j=i;j<100;j++)
for(int k=j;k<100;k++)
if(i*i+j*j+k*k==1000) cout<<i<<' '<<j<<' '<<k<<endl;
return 0;
}
感觉题目有问题,后面应该修改了,这样的解有很多= =
如果不算0的话,答案:10
123.奇妙的数字
枚举
#include<bits/stdc++.h>
using namespace std;
bool check(int n)
{
int st[15]={0};
long long p=n*n,l=n*n*n;
while(p)
{
if(st[p%10]) return false;
st[p%10]++;
p/=10;
}
while(l)
{
if(st[l%10]) return false;
st[l%10]++;
l/=10;
}
for(int i=0;i<10;i++) if(st[i]==0) return false;
return true;
}
int main()
{
for(int i=47;i<100;i++)
if(check(i)) printf("%d %d %d\n",i,i*i,i*i*i);
return 0;
}
答案:69
124.隔行变色
手算
// 5+5+5=15
答案:15
125.立方尾不变
枚举,注意开longlong
#include<bits/stdc++.h>
using namespace std;
int res;
int get_wei(int n)
{
return (int)log10(n)+1;
}
int main()
{
for(long long i=1;i<10000;i++)
if(i*i*i%((int)pow(10,get_wei(i)))==i) printf("%lld\n",i),res++;
cout<<res<<endl;
return 0;
}
答案:36
126.熊怪吃核桃
模拟
#include<bits/stdc++.h>
using namespace std;
int res;
int main()
{
int x=1543;
while(x)
{
if(x&1) res++;
x/=2;
}
cout<<res;
return 0;
}
答案:5
127.九数分三组
DFS
#include<bits/stdc++.h>
using namespace std;
int res;
const int N = 15;
int path[N];
bool st[N];
void dfs(int u)
{
if(u==10)
{
int a=path[1]*100+path[2]*10+path[3];
int b=path[4]*100+path[5]*10+path[6];
int c=path[7]*100+path[8]*10+path[9];
if(2*a==b&&3*a==c) printf("%d ",a);//printf("%d %d %d\n",a,b,c);
return;
}
for(int i=1;i<=9;i++)
{
if(!st[i])
{
st[i]=true;
path[u]=i;
dfs(u+1);
st[i]=false;
}
}
}
int main()
{
dfs(1);
return 0;
}
答案:192 219 273 327
128.立方变自身
枚举
#include<bits/stdc++.h>
using namespace std;
int res;
int calc(int x)
{
int sum=0;
int n=x*x*x;
while(n)
{
sum+=n%10;
n/=10;
}
return sum;
}
int main()
{
for(int i=1;i<1000;i++) if(calc(i)==i) printf("%d\n",i),res++;
cout<<res;
return 0;
}
答案:6