</pre>凑算式</h2><p>看这个算式:☆☆☆ + ☆☆☆ = ☆☆☆如果每个五角星代表 1 ~ 9 的不同的数字。这个算式有多少种可能的正确填写方法?173 +286 = 459295 +173 = 468173 +295 = 468183 +492 = 675以上都是正确的填写法!注意:111 +222 = 333 是错误的填写法!<span style="color:#cc0000">因为每个数字必须是不同的!</span>也就是说:1~9中的所有数字,每个必须出现且仅出现一次!注意:<span style="color:#ff0000"><strong>不包括数字“0”!</strong></span>注意:满足加法交换率的式子算两种不同的答案。所以答案肯定是个偶数! 注意:只要求计算不同的填法的数目不要求列出所有填写法更不要求填写源代码!</p><pre code_snippet_id="1956646" snippet_file_name="blog_20161030_2_1863745" name="code" class="html">#include<stdio.h>
bool jiancha(int j,int k,int l)//判断三个整数的个十百位互不相同;不包括数字0;
{
if(l>999)<span style="color:#ff0000;">//和不能大于999</span>
return false;
int a,b,c,d,e,f,g,h,i;
a=j/100;b=(j%100)/10;c=j%10;
//printf("%d%d%d",a,b,c);
d=k/100;e=(k%100)/10;f=k%10;
g=l/100;h=(l%100)/10;i=l%10;
if(a==0||b==0||c==0||d==0||e==0||f==0||g==0||h==0||i==0)<span style="color:#ff0000;">//个十百位都不能为0</span>
return false;
if(a==b||a==c||a==d||a==e||a==f||a==g||a==h||a==i||b==c||b==d||b==e||b==f||b==g||b==h
||b==i||c==d||c==e||c==f||c==g||c==h||c==i||d==e||d==f||d==g||d==h||d==i||e==f||e==g
||e==h||e==i||f==g||f==h||f==i||g==h||g==i||h==i)<span style="color:#ff0000;">//判断三个整数的个十百位互不相同;</span>
return false;
return true;
}
void main()
{
int i,j,sum;sum=0;
jiancha(500,400,500);
for(j=101;j<1000;j++)
{
for(i=j;i<1000;i++)//i=j目的是为了不让结果重复 比如结果:128+123=251与结果:123+128=251重复的
{
int a,b,c;
a=j;b=i;c=a+b;
if(jiancha(a,b,c))
{sum++;
//printf("%d+%d=%d ",a,b,c);
}
}
}
printf("总共有%d种 ",sum);
}
</pre>凑算式</h2><p>看这个算式:☆☆☆ + ☆☆☆ = ☆☆☆如果每个五角星代表 1 ~ 9 的不同的数字。这个算式有多少种可能的正确填写方法?173 +286 = 459295 +173 = 468173 +295 = 468183 +492 = 675以上都是正确的填写法!注意:111 +222 = 333 是错误的填写法!<span style="color:#cc0000">因为每个数字必须是不同的!</span>也就是说:1~9中的所有数字,每个必须出现且仅出现一次!注意:<span style="color:#ff0000"><strong>不包括数字“0”!</strong></span>注意:满足加法交换率的式子算两种不同的答案。所以答案肯定是个偶数! 注意:只要求计算不同的填法的数目不要求列出所有填写法更不要求填写源代码!</p><pre code_snippet_id="1956646" snippet_file_name="blog_20161030_2_1863745" name="code" class="html">#include<stdio.h>
bool jiancha(int j,int k,int l)//判断三个整数的个十百位互不相同;不包括数字0;
{
if(l>999)<span style="color:#ff0000;">//和不能大于999</span>
return false;
int a,b,c,d,e,f,g,h,i;
a=j/100;b=(j%100)/10;c=j%10;
//printf("%d%d%d",a,b,c);
d=k/100;e=(k%100)/10;f=k%10;
g=l/100;h=(l%100)/10;i=l%10;
if(a==0||b==0||c==0||d==0||e==0||f==0||g==0||h==0||i==0)<span style="color:#ff0000;">//个十百位都不能为0</span>
return false;
if(a==b||a==c||a==d||a==e||a==f||a==g||a==h||a==i||b==c||b==d||b==e||b==f||b==g||b==h
||b==i||c==d||c==e||c==f||c==g||c==h||c==i||d==e||d==f||d==g||d==h||d==i||e==f||e==g
||e==h||e==i||f==g||f==h||f==i||g==h||g==i||h==i)<span style="color:#ff0000;">//判断三个整数的个十百位互不相同;</span>
return false;
return true;
}
void main()
{
int i,j,sum;sum=0;
jiancha(500,400,500);
for(j=101;j<1000;j++)
{
for(i=j;i<1000;i++)//i=j目的是为了不让结果重复 比如结果:128+123=251与结果:123+128=251重复的
{
int a,b,c;
a=j;b=i;c=a+b;
if(jiancha(a,b,c))
{sum++;
//printf("%d+%d=%d ",a,b,c);
}
}
}
printf("总共有%d种 ",sum);
}
思路:
两个加数a,b a从101到999,b从101+a到999;
和为c=a+b;判断a,b,c满足的条件
1.个十白位互不相同
2.个十白不为0
3.c不能>1000;
具体实现函数 bool jiancha(int j,int k,int l);
运行结果
第一次写 博客有问题的请指出