历年noip普及组(c++~)完善程序题分析总结归纳.doc
|完善程序题总结归纳 By:七(6) yx一、 【题目】 (哥德巴赫猜想)哥德巴赫猜想是指,任一大于 2 的偶数都可写成两个质数之和。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于 2 且不超过 n 的偶数都能写成两个质数之和。#includeusing namespace std;int main()const int SIZE=1000;int n,r,pSIZE,i,j,k,ans;bool tmp;cin>>n;r=1;p1=2;for(i=3;i#includeusing namespace std;const int size=100;const int infinity = 10000;const bool left=1;const bool right =0;const bool left_to_right=1;const bool right_to_left=0;|int n,hoursize;bool possize;int max(int a,int b)return a>b?a:b;int go(bool stage)int i,j,num,tmp,ans;if(stage=right_to_left)num=0;ans=0;for(i=1;ians)ans=houri;if( )return ans;ans=infinity;for(i=1;i>n;for(i=1;i>houri;posi=right;coutusing namespace std;const int SIZE = 50;int n1,m1,n2,m2,aSIZESIZE,bSIZESIZE;int main()int i,j,k1,k2;bool good,haveAns;cin>>n1>>m1;for(i=1;i>aij;cin>>n2>>m2;for(i=1;i>bij;2、m1-m2+1;3、good=1;4、m2;5、haveAns=1;【年份】2011 年四、 【题目】(大整数开方) 输入一个正整数 n(1n10 100) ,试用二分法计算它的平方根的整数部分。#include#includeusing namespace std;const int SIZE=200;struct hugeintint len,numSIZE;/其中 len 表示大整数的位数;num1表示个位,num2表示十位,以此类推hugeint times(hugeint a,hugeint b)/ 计算大整数 a 和 b 的乘积int i,j;hugeint ans;memset(ans.num,0,sizeof(ans.num);for(i=1;i0)ans.len=a.len+b.len;elseans.len=a.len+b.len-1;|return ans;hugeint add(hugeint a,hugeint b)/计算大整数 a 和 b 的和int i;hugeint ans;memset(ans.num,0,sizeof(ans.num);if(a.len>b.len)ans.len=a.len;elseans.len=b.len;for(i=1;i0)ans.len+;return ans;hugeint average(hugeint a,hugeint b)/计算大整数 a 和 b 的平均数的整数部分int i;hugeint ans;ans=add(a,b);for(i=ans.len;i>=2;i-)ans.numi-1+=( )*10; ans.numi/=2;ans.num1/=2;if(ans.numans.len=0)ans.len-;return ans;hugeint plustwo(hugeint a)/ 计算大整数 a 加 2 之后的结果|int i;hugeint ans;ans=a;ans.num1+=2;i=1;while( (i=10) )ans.numi+1+=ans.numi/10;ans.numi%=10;i+;if(ans.numans.len+1>0) ; return ans;bool over(hugeint a,hugeint b)/ 若大整数 a>b 则返回 true,否则返回 falseint i;if( ) return false;if( a.len>b.len )return true;for(i=a.len;i>=1;i-)if(a.numib.numi)return true;return false;int main()string s;int i;hugeint target,left,middle,right;cin>>s;memset(target.num,0,sizeof(target.num);target.len=s.length();for(i=1;i=1;i-)coutusing namespace std;const int SIZE =100;int xSIZE,ySIZE,fSIZE;int n,i,j,max_f,ans;int main()cin>>n;for(i=1;i>xi>>yi;max_f=0;for(i=1;i1)&& (fi>fi-1)(我写的是 fi>max_f) 5、ans=max_f(我写的是 ans=i)其实我做的是对的,正确答案有 bug;