解题思路:
注意事项:
参考代码:
看到大家都这么渣我好悲伤
洗脑开始 1.这题难道不高,关键在于思路,其实+,=个占4个火柴棒, 而他们是必须存在的,所以对火柴棒数-4就简单了, 在枚举上,我们可以枚举2个数,第三个数就是a+b啦! 根据只有20根火柴棒(删掉了=和+), 我们能知道枚举数不会超过1111,有些童鞋只枚举到了1000,难道是我错了??? 注意全部火柴必须用上,该数非零,则最高位不能是0!!!!!!! #include <iostream> using namespace std; int fun(int x) //用来计算一个数所需要的火柴棍总数 { int num=0; //用来计数变量 int f[10]={6,2,5,5,4,5,6,3,7,6}; //用一个数组记录0~9数字所需的火柴棍数 while(x/10!=0) // x除以10不等于0的话,说明该数至少有两位 { num+=f[x%10]; //加上该位火柴棍数 x=x/10; } num+=f[x]; //加上最高位的火柴棍数 return num; } int main() { int a,b,c,m,sum=0; cin>>m; //火柴棍总个数 for(a=0;a<=1111;a++) //开始枚举 { for(b=0;b<=1111;b++) { c=a+b; if(fun(a)+fun(b)+fun(c)==m-4) //去掉+和= sum++; } } cout<<sum<<endl; return 0; } 2.较简短代码。 #include<iostream> using namespace std; int nu[10]={6,2,5,5,4,5,6,3,7,6};//定义个辅助数组记录每个数字所需的火柴数int matches(int num){ //一个用来计算一个数需多少个火柴棒的函数 int i,k=0; //K是火柴棒的数量 for(i=num;i!=0;i/=10)k+=nu[i%10]; //将这个数字每一位的火柴棒的数量都计算出来 if(num==0)k+=nu[0]; //有一种特殊情况:数字为0此时不会执行上述程序,所以加一个 return k; }int main(){ int i,j,all=0,n; //all是符合条件的算式总数 cin>>n; for(i=0;i<=1000;i++)for(j=0;j<=1000;j++)if(matches(i)+matches(j)+matches(i+j)+4==n)all++; //如果这个算式加起来的火柴棒总数刚好用完所有火柴棒就把数量往上加 cout<<all; return 0; } 3.这道题的n<=24.所以,最大1111+1111?1111; 显然不等,但1111+1111不等, 说明两个循环i,j均<=1111;所以直接O(n^2);再用一个函数判等;一个数组储存0到9的火柴棒数;。。。 #include<bits/stdc++.h> using namespace std; int num[10]={6,2,5,5,4,5,6,3,7,6},n,t,sum,i,j; bool check[1115]; int cnt(int x) { sum=0; if(x==0) return 6; else { while(x!=0) { sum+=num[x%10]; x=x/10; } return sum; } } int main() { while(true)//反抄袭; scanf("%d",&n); for(i=0;i<=1111;++i) for(j=0;j<=1111;++j) { if(cnt(i)+cnt(j)+cnt(i+j)==n-4) { t++; } } cout<<t; return 0; } 为了看看大家到底对这题懂了多少,我给大家一个思路让大家来编 写完后用踢界的方式上传给我看看,ok!! 打表,制作一张0~1000数需要的火柴棒的表,然后再穷举求解。 a[]数组记录0..9所需要的火柴数,用于制作b[]这张大表。 其中,book的作用是使计算b[0]时不会使它的值计算为0(开始犯的错误...) 最后,二重循环穷举a,b,c,用if 语句判断。 最后输出ans.
0.0分
2 人评分
#include <stdio.h> #include<stdlib.h> int fan(int a) { int number[10] = { 6,2,5,5,4,5,6,3,7,6 }; int result = 0; if (a == 0) return 6; else { while (a > 0) { result = result+number[a % 10]; a = a / 10; } return result; } } int main() { int a,b,result=0,x; scanf("%d", &a); a = a - 4; b = a; int i=0, j=0,z; while (i<1000) { j = 0; if (fan(i)< a) while (i + j < 1000) { b = a - fan(i) - fan(j); z = i + j; if (b == fan(z)) result++; j++; } i++; } printf("%d", result); return 0; }
K-进制数 (C语言描述,蓝桥杯)浏览:955 |
简单的a+b (C语言代码)浏览:457 |
勾股数 (C语言代码)浏览:830 |
数组输出 (C语言代码)浏览:749 |
矩阵转置 (C语言代码)浏览:855 |
很简单,,题解1041:C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:616 |
三进制小数 (C语言代码)浏览:903 |
发工资咯 (C语言代码)浏览:815 |
test 2浏览:715 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:666 |
元气 2020-01-12 14:44:36 |
题目是很简单的……但是很少人做