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 提高组复赛《火柴棒等式》题解程序作者[fanld] 发表于[2008-11-22 0:07:00] 本题看题后感觉无法上手,但是仔细分析后便...


NOIP2008提高组复赛模拟试题

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


NOIP2008提高组前三题解题报告

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


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

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


NOIP2008_提高组_复赛试题

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


NOIP2008复赛提高组试题

NOIP2009高中复赛试题 7页 免费 NOIP2008提高组解题报告 13页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...


NOIP2008提高组复赛试题

Noip2010提高组试题 10页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 NOIP2008提高组复赛试题 NOIP2008提高组复赛...


noip2008普及组复赛试题(附题解)

全国信息学奥林匹克联赛(NOIP2008)复赛 普及组 全国信息学奥林匹克联赛(NOIP...NOIP2008普及组试题 7页 免费 NOIP2008 提高组 复赛试... 6页 免费 NOIP...


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

NOIP2008提高组初赛试题_C++含答案_英语考试_外语学习_教育专区。第十四届全国青少年...NOIP2008复赛试题 提高组... 8页 免费 NOIP2008提高组复赛模拟... 暂无评价...


2007noip提高组复赛

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

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