小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数
#include <iostream>
using namespace std;
int main()
{
int count=0;
for(int a=1; a<=9; a++)
{
for(int b=1; b<=9; b++)
{
for(int c=1; c<=9; c++)
{
for(int d=1; d<=9; d++)
{
for(int e=1; e<=9; e++)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
{
if((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e))
count++;
}
}
}
}
}
}
cout<<"共"<<count<<"个"<<endl;
return 0;
}
运行结果:
2016年第7届第三题
解法一:
因小数数字运算会导致麻烦的问题,所以对其式子通分。
#include <iostream>
using namespace std;
int main()
{
int s=0;
for(int a=1; a<=9; a++)
{
for(int b=1; b<=9; b++)
{
if(b==a)
continue;
for(int c=1; c<=9; c++)
{
if(c==a||c==b)
continue;
for(int d=1; d<=9; d++)
{
if(d==a||d==b||d==c)
continue;
for(int e=1; e<=9; e++)
{
if(e==a||e==b||e==c||e==d)
continue;
for(int f=1; f<=9; f++)
{
if(f==a||f==b||f==c||f==d||f==e)
continue;
for(int g=1; g<=9; g++)
{
if(g==a||g==b||g==c||g==d||g==e||g==f)
continue;
for(int h=1; h<=9; h++)
{
if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)
continue;
for(int i=1; i<=9; i++)
{
if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h)
continue;
int t1=a*c*(100*g+10*h+i);
int t2=b*(100*g+10*h+i);
int t3=c*(100*d+10*e+f);
int t4=10*c*(100*g+10*h+i);
if(t1+t2+t3==t4)
s++;
}
}
}
}
}
}
}
}
}
cout<<s<<endl;
return 0;
}
解法二:
式子直接乘1.0
#include <iostream>
using namespace std;
int main()
{
int s=0;
for(int a=1; a<=9; a++)
{
for(int b=1; b<=9; b++)
{
if(b==a)
continue;
for(int c=1; c<=9; c++)
{
if(c==a||c==b)
continue;
for(int d=1; d<=9; d++)
{
if(d==a||d==b||d==c)
continue;
for(int e=1; e<=9; e++)
{
if(e==a||e==b||e==c||e==d)
continue;
for(int f=1; f<=9; f++)
{
if(f==a||f==b||f==c||f==d||f==e)
continue;
for(int g=1; g<=9; g++)
{
if(g==a||g==b||g==c||g==d||g==e||g==f)
continue;
for(int h=1; h<=9; h++)
{
if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)
continue;
for(int i=1; i<=9; i++)
{
if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h)
continue;
if((a+(b*1.0/c)+(d*100+e*10+f)*1.0/(g*100+h*10+i))==10)
s++;
}
}
}
}
}
}
}
}
}
cout<<s<<endl;
return 0;
}
运行结果:
29
2016年第7届第6题
解:
依次判断每一个格子,后面的格子不用管
#include <iostream>
using namespace std;
int main()
{
int s=0;
for(int a=0; a<=9; a++)
{
for(int b=0; b<=9; b++)
{
if((b==(a+1))||(b==(a-1)))
continue;
for(int c=0; c<=9; c++)
{
if((c==(b+1))||(c==(b-1)))
continue;
for(int d=0; d<=9; d++)
{
if((d==(a+1))||(d==(a-1)))
continue;
for(int e=0; e<=9; e++)
{
if((e==(a+1))||(e==(a-1))||(e==(d+1))||(e==(d-1))||(e==(b+1))||(e==(b-1)))
continue;
for(int f=0; f<=9; f++)
{
if((f==(b+1))||(f==(b-1))||(f==(e+1))||(f==(e-1))||(f==(a-1))||(f==(a+1))||(f==(c-1))||(f==(c+1)))
continue;
for(int g=0; g<=9; g++)
{
if((g==(c+1))||(g==(c-1))||(g==(f+1))||(g==(f-1))||(g==(b+1))||(g==(b-1)))
continue;
for(int h=0; h<=9; h++)
{
if((h==(d+1))||(h==(d-1))||(h==(e+1))||(h==(e-1)))
continue;
for(int i=0; i<=9; i++)
{
if((i==(h+1))||(i==(h-1))||(i==(e+1))||(i==(e-1))||(i==(d+1))||(i==(d-1))||(i==(f+1))||(i==(f-1)))
continue;
for(int j=0; j<=9; j++)
{
if((j==(i+1))||(j==(i-1))||(j==(f+1))||(j==(f-1))||(j==(e+1))||(j==(e-1))||(j==(g+1))||(j==(g-1)))
continue;
s++;
}
}
}
}
}
}
}
}
}
}
cout<<s<<endl;
return 0;
}
运行结果:
206059714
2015第6届第1题
奖券数目
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10-99),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
#include <iostream>
using namespace std;
int main()
{
int count=0;
for(int i=1; i<10; i++)
{
if(i==4)
continue;
for(int j=0; j<10; j++)
{
if(j==4)
continue;
for(int k=0; k<10; k++)
{
if(k==4)
continue;
for(int l=0; l<10; l++)
{
if(l==4)
continue;
for(int m=0; m<10; m++)
{
if(m==4)
continue;
count++;
}
}
}
}
}
cout<<count<<endl;
cout<<8*9*9*9*9<<endl; //第二种方法:第一位不取0和4,剩下四位不取4
return 0;
}
运行结果:
52488
2015第6届第3题
三羊献瑞
观察下面的加法算式:
祥 瑞生 辉
+ 三羊 献 瑞
-------------------
三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include <iostream>
using namespace std;
int main()
{
for(int a=1; a<10; a++)
{
for(int b=0; b<10; b++)
{
if(b==a)
continue;
for(int c=0; c<10; c++)
{
if(c==a||c==b)
continue;
for(int d=0; d<10; d++)
{
if(d==a||d==b||d==c)
continue;
for(int e=1; e<10; e++)
{
if(e==a||e==b||e==c||e==d)
continue;
for(int f=0; f<10; f++)
{
if(f==a||f==b||f==c||f==d||f==e)
continue;
for(int g=0; g<10; g++)
{
if(g==a||g==b||g==c||g==d||g==e||g==f)
continue;
for(int h=0; h<10; h++)
{
if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)
continue;
int t1=a*1000+b*100+c*10+d;
int t2=e*1000+f*100+g*10+b;
int t3=e*10000+f*1000+c*100+b*10+h;
if(t1+t2==t3)
cout<<e<<" "<<f<<" "<<g<<" "<<b<<endl;
}
}
}
}
}
}
}
}
return 0;
}
运行结果:
2014年第5届第6题
标题:奇怪的分式
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:
1/4 乘以 8/5
小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
思路:
#include <iostream>
using namespace std;
int main()
{
int count=0;
int a,b,c,d;
for(a=1; a<10; a++)
{
for(b=1; b<10; b++)
{
for(c=1; c<10; c++)
{
for(d=1; d<10; d++)
{
if(a==c||b==d)
continue;
if((a*b)*1.0/(c*d)==(a*10+b)*1.0/(c*10+d)) //注意*1.0
count++;
}
}
}
}
cout<<count<<endl;
return 0;
}
运行结果: