填空题
猜年龄
正确答案:
10
#include <bits/stdc++.h>
using namespace std;
int main()
{
bool ok = true;
int x, y;
for(int i = 9; ok; i++)
{
for(int j = i - 8; j < i; j++)
{
if(i*j == (i+j)*6)
{
ok = false;
x = i, y = j;
}
if(!ok) break;
}
}
printf("%d %d\n",x,y);
return 0;
}
切面条
正确答案:
1025
1 + 2 n 2^n 2n n n n 表示对折次数
神奇算式
正确答案:
12
#include <bits/stdc++.h>
using namespace std;
int main()
{
int ans = 0;
for(int i = 102; i < 999; i++)
{
int t = i;
set<int>s; s.clear();
while(t > 0) s.insert(t%10), t/= 10;
if(s.size() != 3) continue;
for(int j = 1; j <= 9; j++)
{
if(s.find(j) != s.end()) continue;
int temp = i*j;
if(temp < 1023 || temp > 9876) continue;
set<int>one;
one.clear();
while(temp > 0) one.insert(temp%10), temp /= 10;
vector<int> v; v.clear();
for(set<int>:: iterator it = s.begin(); it != s.end(); it++) v.push_back(*it);
v.push_back(j);
int ok = 1;
for(int k = 0; k < 4; k++)
if(one.find(v[k]) == one.end()) ok = 0;
if(ok)
{
ans++;
cout<<i<<" "<<j<<endl;
}
}
}
set<int>c; c.clear();
for(int i = 10; i < 99; i++)
{
int t = i;
set<int>s;
s.clear();
while(t > 0) s.insert(t%10), t/= 10;
if(s.size() != 2) continue;
for(int j = 10; j < 99; j++)
{
int a = j%10, b = j/10;
if(a == b || s.find(a) != s.end() || s.find(b) != s.end()) continue;
int temp = i*j;
if(temp < 1023 || temp > 9876) continue;
set<int>one;
one.clear();
while(temp > 0) one.insert(temp%10), temp /= 10;
vector<int> v; v.clear();
for(set<int>:: iterator it = s.begin(); it != s.end(); it++) v.push_back(*it);
v.push_back(a); v.push_back(b);
int ok = 1;
for(int k = 0; k < 4; k++)
if(one.find(v[k]) == one.end()) ok = 0;
if(ok)
{
if((c.find(i) != c.end() && c.find(j) != c.end()) || i == j) continue;
ans++;
cout<<i<<" "<<j<<endl;
c.insert(i); c.insert(j);
}
}
}
cout<<ans<<endl;
return 0;
}
史丰收速算
正确答案:
#include <bits/stdc++.h>
using namespace std;
int ge_wei(int a)
{
if(a%2 == 0) //偶数
return (a*2)%10; //乘以2保留个位
else //奇数
return (a*2+5)%10; //乘以2加5保留个位
}
//计算进位
int jin_wei(char* mod)
{
char* level[] = {
"142857",
"285714",
"428571",
"571428",
"714285",
"857142"
}; //多位数超过 n/7 就要进 n
char buf[7];
buf[6] = '\0';
strncpy(buf, mod, 6); //将mod这个字符串拷贝到buf中
int i;
for(i = 5; i >= 0; i--){
int tr = strcmp(level[i], buf); //从后往前,依次取 level中的串和buf比较
if(tr