历年noip普与组(c)完善程序题总结归纳0001.docxVIP

  • 1
  • 0
  • 约1.06万字
  • 约 20页
  • 2021-09-17 发布于天津
  • 举报

历年noip普与组(c)完善程序题总结归纳0001.docx

完善程序题总结归纳 By :七( 6 ) yx 一、【题目】 (哥德巴赫猜想)哥德巴赫猜想是指,任一大于 2 的偶数都可写成两个质 数之和。迄今为止, 这仍然是一个著名的世界难题, 被誉为数学王冠上的明珠。 试编写程序, 验证任一大于 2 且不超过 n 的偶数都能写成两个质数之和。 #includeiostream using namespace std; int main() { const int SIZE=1000; int n,r,p[SIZE],i,j,k,ans; bool tmp; cinn; r=1; p[1]=2; for(i=3;i=n;i++) { ①; for(j=1;j=r;j++) if(i% ② ==0) { tmp=false; break; } if(tmp) { r++; ③; } } ans=0; for(i=2;i=n/2;i++) { tmp=false; for(j=1;j=r;j++) for(k=j;k=r;k++) if(i+i== ④ ) { tmp=true; break; } if(tmp) ans++; } coutansendl; return 0; } 若输入 n 为 2010 ,则输出 ⑤ 时表示验证成功,即大于 2 且不超过 2010 的偶数都满足哥德巴赫猜想。 【算法】先 for 一遍,找出质数,然后对每一个偶数进行一 一匹配( 2 除外),效率 O (n^3 ) 【代码】 1、 tmp=1 ;2 、 p[j];3 、p[r]=j;4 、 p[j]+p[k]5 、 1004 【年份】 2010 年 二、【题目】 (过河问题 ) 在一个月黑风高的夜晚 ,有一群人在河的右岸 , 想通过唯一的 一根独木桥走到河的左岸 .在伸手不见五指的黑夜里 ,过桥时必须借照灯光来照明 , 不幸的是 , 他们只有一盏灯 .另外 ,独木桥上最多能承受两个人同时经过 ,否则将会坍塌 .每个人单独过独 木桥都需要一定的时间 ,不同的人要的时间可能不同 . 两个人一起过独木桥时 ,由于只有一盏 灯 , 所以需要的时间是较慢的那个人单独过桥所花费的时间 .现在输入 N(2=N1000) 和这 N 个人单独过桥需要的时间 ,请计算总共最少需要多少时间 , 他们才能全部到达河左岸 . 例如,有 3个人甲、乙、丙 ,他们单独过桥的时间分别为 1、2 、4,则总共最少需要的时间 为 7. 具体方法是 :甲、乙一起过桥到河的左岸 ,甲单独回到河的右岸将灯带回 , 然后甲、丙在 一起过桥到河的左岸 ,总时间为 2+1+4=7. #includeiostream #includecstring using 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,hour[size]; bool pos[size]; int max(int a,int b){return ab?a:b;} int go(bool stage) { int i,j,num,tmp,ans; if(stage==right_to_left) { num=0; ans=0; for(i=1;i=n;i++) if(pos[i]==right) { num++; if( hour[i]ans) ans=hour[i]; } if( ① ) return ans; ans=infinity; for(i=1;i=n-1;i++) if(pos[i]==right) for(j=i+1;j=n;j++) if(pos[j]==right) { pos[i]=left; pos[j]=left; tmp=max(hour[i],hour[j])+ if(tmpans) ans=tmp; pos[i]=right; pos[j]=right; return ans; if(stage==left_to_right) { ans=infinity; for(i=1;i=n;i++) if( ③ ) { pos[i]=right; tmp= ④ if(tmpans) ans=tmp; ⑤; } return ans; } return 0; } int main() { int i; cinn; for(i=1;i=n;i++) { cinhour[i]; pos[i]=right; } coutgo[right_to_left)endl; return 0; } 【算法】

文档评论(0)

1亿VIP精品文档

相关文档