您所在位置:论坛首页 — C/C++语言 — 编程比赛 —第64次编程比赛 本帖地址: http://bbs.pfan.cn/post-266850.html [复制地址] [搜索相关帖子] |
|||||
|
|
|||||||
|
|
作者:plane 专家分:310 ![]() ![]() |
发表时间:2008-2-2 11:26:00
1
楼
//主题 int pow2[8]={1,2,4,8,16,32,64,128}; int decollator(const char SOH[ ], char text[ ]){ int i=0,j=7,l=strlen(SOH),pt=0; int t=0,f=1; while(i<l){ if(SOH[i]=='1'||SOH[i]=='0'){ t+=pow2[j]*(SOH[i]-'0'); j--; if(j<0||i+1>=l){ if(t<128){ text[pt++]=(char)t; f=1; } else f=0; j=7; t=0; } i++; } else if(SOH[i]=='R'){ i+=4; if(j==7&&f){ t=text[--pt]; } else if(t>=128||(j==7&&f==0)){ j=7; t=0; continue; } for(int m=0;m<(SOH[i-1]);m++) text[pt++]=t; } else if(SOH[i]=='S') i+=11; } text[pt]=0; return pt; } //副题 #include <stdio.h> int opt[100][5]; int main() { for(int a=1;a<1000;a++){ for(int i=0;i<=a;i++){ opt[i][0]=1; } for(int i=0;i<=4;i++) opt[0][i]=1; for(int i=1;i<=a;i++) for(int j=1;j<=4;j++) opt[i][j]=opt[i-1][j]+opt[i][j-1]; if(opt[a][4]==70){ printf("ans is %d\n",a); break; } } return 0; } 最后修改于2008-2-2 12:51:00 ![]() ![]()
此帖尚未评分
|
|
作者:ID43 专家分:0 ![]() ![]() |
发表时间:2008-2-2 12:07:00
2
楼
第二题:
#include <stdio.h> int main(){ int i,j; for (i=0,j=24;;i++){ i++; j/=i; j*=i+4; if (j==1680) break; } printf("%d\n",i); return 0; } 算法如下: 由于总共走x+4段路程,并且其中有4段是往西走,因此总的走法是C(x+4,4)种。求的结果也就是C(x+4,4)=70 由于C(x+4,4)=(x+4)!/x!/4!=0=70 进而(x+1)(x+2)(x+3)(x+4)=70*24=1680 因而枚举x即可
此帖尚未评分
|
|
作者:Twent 专家分:30 ![]() ![]() |
发表时间:2008-2-2 16:49:00
3
楼
#include <iostream>
第2题- - using namespace std; int main() { for (long n=1;;n++) { if ((n+1)*(n+2)*(n+3)*(n+4)==70*24) { cout<<n<<endl; break; } } return 0; }
此帖尚未评分
|
|
作者:yxs0001 专家分:9560 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
发表时间:2008-2-4 11:20:00
4
楼
副题:
#include <iostream> int result() { int left = 120; int right = 70*24; int i = 1; do{ i++; left*=i+4; right *= i; }while(left<right); return i; } int main() { cout<<result()<<endl; return 0; }
此帖尚未评分
|
|
此帖已结帖,禁止回复