tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> 数学 >>

NOIP2008提高组复赛


提高组复赛《火柴棒等式》 NOIP2008 提高组复赛《火柴棒等式》题解程序
作者[fanld] 发表于[2008-11-22 0:07:00]
本题看题后感觉无法上手,但是仔细分析后便可以发现有巧妙的思路包含在内。 本题看题后感觉无法上手,但是仔细分析后便可以发现有巧妙的思路包含在内。基本思路是枚 举。 我的思路是:枚举(0……n) 0……n) 0……2n)所有等式所需要的火柴个数, 我的思路是:枚举(0……n)+(0……n)=(0……2n)所有等式所需要的火柴个数,当枚举到 相等时记录下当前等式。当然, 的数目需要仔细分析,本题也有取巧之处, 的等式和输入的 N 相等时记录下当前等式。当然,n 的数目需要仔细分析,本题也有取巧之处, 稍候分析。 y),作用是计算等式 所需要的火柴数目, 稍候分析。构造一个函数 int Hadd(int x,int y),作用是计算等式 x+y=xy 所需要的火柴数目, 每个数字所需要的火柴数放到数组 A[10]中 方便取用。程序编制完毕, 并将数字 0 到 9 每个数字所需要的火柴数放到数组 A[10]中,方便取用。程序编制完毕,因为题 N<=24, 10000,足可以算出所有的等式,但是时间很慢, 目中 N<=24,我把枚举的等式范围扩大到 0 到 10000,足可以算出所有的等式,但是时间很慢, 多秒才算完。仔细研究计算的结果, 711+0=711,所以, 花了 10 多秒才算完。仔细研究计算的结果,最大的等式是 711+0=711,所以,我把 N 改回到 80 来说足够了, 时间也很快。 0,对 N=24 来说足够了,程序 2 个循环共 800*800 次,时间也很快。这个题算是在做的时候用 了点小技巧。 了点小技巧。程序附在最后

--------------------------------------------------------------------------2. 火柴棒等式

(matches.pas/c/cpp) 【问题描述】 给你 n 根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0 -9 的拼法如图所示:

注意: 1. 加号与等号各自需要两根火柴棍 2. 如果 A≠B,则 A+B=C 与 B+A=C 视为不同的等式(A、B、C>=0) 3. n 根火柴棍必须全部用上 【输入】 输入文件 matches.in 共一行,又一个整数 n(n<=24)。 【输出】

输出文件 matches.out 共一行,表示能拼成的不同等式的数目。 【输入输出样例 1】
matches.in 14 matches.out 2

【输入输出样例 1 解释】 2 个等式为 0+1=1 和 1+0=1。 【输入输出样例 2】
matches.in 18 matches.out 9

【输入输出样例 2 解释】 9 个等式为: 0+4=4 0+11=11 1+10=11 2+2=4 2+7=9 4+0=4 7+2=9 10+1=11 11+0=11 —————————————————————————————— matches.cpp #define maxn 800 #i nclude <stdio.h>

int Hadd(int x,int y)//计算 x+y=xy 公式所需要的火柴个数 { int num=4,z,a[10]={6,2,5,5,4,5,6,3,7,6}; z=x+y; while(1)//x { if(x<10) { num=a[x]+num; break; } else { num=a[x%10]+num; x=x/10; } }//end while while(1)//y { if(y<10) { num=a[y]+num; break; } else { num=a[y%10]+num; y=y/10; } }//end while while(1)//z { if(z<10) { num=a[z]+num; break; } else { num=a[z%10]+num; z=z/10; } }//end while

return num; } int main() { int i,j,n,m=0,k; freopen("matches.in","r",stdin); freopen("matches.out","w",stdout); scanf("%d",&n); for (i=0;i<maxn;i++) { for(j=0;j<maxn;j++) { k=Hadd(i,j); if(k==n) { //printf("%d+%d=%d\n",i,j,i +j); m++; } } } printf("%d",m); fclose(stdin); fclose(stdout); }


推荐相关:

NOIP2008_提高组_复赛试题

NOIP2008_提高组_复赛试题_学科竞赛_高中教育_教育专区。全国信息学奥林匹克联赛(NOIP2008)复赛提高组 全国信息学奥林匹克联赛(NOIP2008)复赛 提高组 1. 笨小猴 ...


NOIP2008提高组复赛模拟试题

NOIP 2008 复赛模拟试题 (提高组) 全国青少年信息学奥林匹克 联赛复赛模拟试题湖南省长沙市第一中学试题名称 目录 输入文件名 输出文件名 试题类型 附加文件 时限 ...


NOIP2008提高组全国一等奖名单

NOIP2008提高组全国一等奖名单_IT认证_资格考试/认证_教育专区。noi 计算机 竞赛...NOIP2008复赛提高组试题 6页 免费 NOIP2008提高组解题报告 13页 免费 NOIP2008...


NOIP2008提高组前三题解题报告

NOIP2008 提高组复赛 解题思路 1、字符串中统计字母出现次数 最大减最小的 然后判断质数 字符串长度<=100 2、给出 n<=24 个火柴棍, 求最多能摆出多少 a+...


2007noip提高组复赛

NOIP2008提高组复赛 4页 1下载券 NOIP2009提高组复赛题解 12页 1下载券 提高...第1页 共6页 全国信息学奥林匹克联赛(NOIP2007)复赛 提高组 1.统计数字 . ...


NOIP2008提高组初赛试题_C++含答案 改动

NOIP2008提高组初赛试题_C++含答案 改动_学科竞赛_高中教育_教育专区。第十四届...NOIP2008提高组复赛模拟... 13页 免费 NOIP2008初赛普及组试题... 暂无评价...


NOIP2008普及组复赛思路及程序(PASCAL)

NOIP2008普及组复赛思路及程序(PASCAL)_城乡/园林规划_工程科技_专业资料。saf第...找 NOIP 2007 提高组 复赛 的 解题报告(free pascal) ? noip 复赛什么时候...


NOIP2008年提高组(C++语言)

NOIP2008提高组(C++语言)NOIP2008提高组(C++语言)隐藏>> 第十四届全国青少年信息学奥林匹克联赛初赛试题( 提高组 C++ 语言 二小时完成 )●● 全部试题答案均...


NOIP2008年提高组初赛试题(十四届)(非常详细)

NOIP2008年提高组初赛试题(十四届)(非常详细)_计算机硬件及网络_IT/计算机_专业...NOIP2008 提高组 复赛试... 6页 免费 NOIP2008初赛普及组试题... 暂无评价...


NOIP2006-2008初赛(提高组)

马鞍山二中 NOIP2006~2008 初赛(提高组)试题&解析 第十二届全国青少年信息学奥林...16.在下列各软件中,属于 NOIP 竞赛(复赛)推荐使用的语言环境有( A. gcc 【...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com