杭电oj2047-2049、2051-2053、2056、2058

2047  阿牛的EOF牛肉串

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,i;
 5     _int64 s[51];
 6     while(~scanf("%d",&n)){
 7         s[1]=3;s[2]=8;
 8         for(i=3;i<=n;i++){
 9             s[i] = s[i-1]*2 + s[i-2]*2;
10         }
11         printf("%I64d\n",s[n]);
12     }
13         
14     
15 }

 

2048  神、上帝以及老天爷

 

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,m,i;
 5     _int64 s[21][2];
 6     while(~scanf("%d",&n)){
 7         while(n--){
 8             scanf("%d",&m);
 9             s[1][0] = 0;s[2][0] = 1;s[1][1] = 1;s[2][1] = 2;
10             for(i=3;i<=m;i++){
11                 s[i][0] = (i-1)*(s[i-1][0] + s[i-2][0]);
12                 s[i][1] = s[i-1][1] * i;
13             }
14             printf("%.2lf%%\n",s[m][0]*100.00/s[m][1]);
15         }
16     }
17 
18 }

转一个错排公式

错排公式推导:

当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.

第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;

第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;

综上得到

D(n) = (n-1) [D(n-2) + D(n-1)]
---------------------
作者:程序小白_龙
来源:CSDN
原文:https://blog.csdn.net/dragon_dai_2017/article/details/70880960
版权声明:本文为博主原创文章,转载请附上博文链接!

 

2049  不容易系列之(4)——考新郎

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int c,n,m,i,j;
 5     _int64 s[21],num1,num2;
 6     s[1] = 0;s[2] = 1;
 7     for(i=3;i<21;i++){
 8         s[i] = (i-1)*(s[i-1] + s[i-2]);
 9     }
10     while(~scanf("%d",&c)){
11         while(c--){
12             scanf("%d %d",&n,&m);
13             j=n;num1=1;num2=1;
14             for(i=m;i>0;i--){
15                 num1 *= j;
16                 num2 *= i;
17                 j--;
18             }
19             printf("%I64d\n",num1/num2*s[m]);
20         }
21     }
22 
23 }

 

 

2051  Bitset

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,i,j,s[50];
 5     while(~scanf("%d",&n)){
 6         i=0;
 7         while(n/2>=1){
 8             s[i] = n%2;
 9             i++;
10             n /= 2;
11         }
12         s[i] = 1;
13         for(j=i;j>=0;j--){
14             printf("%d",s[j]);
15         }
16         printf("\n");
17     }
18 
19     
20 }

 

2052   Picture

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,m,i,j;
 5     char s[80][80];
 6     while(scanf("%d %d",&n,&m)!=EOF){
 7         for(i=0;i<=m+1;i++){
 8             for(j=0;j<=n+1;j++){
 9                 if(i==0 || i==m+1){
10                     s[i][j] = '-';
11                 }else if(j==0 || j==n+1){
12                     s[i][j] = '|';
13                 }else{
14                     s[i][j] = ' ';
15                 }
16             }
17         }
18         s[0][0] = '+';s[0][n+1] = '+';
19         s[m+1][0] = '+';s[m+1][n+1] = '+';
20         for(i=0;i<=m+1;i++){
21             for(j=0;j<=n+1;j++){
22                 printf("%c",s[i][j]);
23             }
24             printf("\n");
25         }
26         printf("\n");
27     }
28 }

 

2053   Switch Game

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,i,count;
 5     while(~scanf("%d",&n)){
 6         count = 0;
 7         for(i=1;i<=n;i++){
 8             if(n%i==0){count++;}
 9         }
10         if(count%2==0){printf("0\n");}
11         else{printf("1\n");}
12     }
13 }

 

2056  Rectangles

 1 #include<stdio.h>
 2 
 3 void sort(double s[]){
 4     int i,j;
 5     double temp;
 6     for(i=1;i<5;i++){
 7         for(j=4;j>i;j--){
 8             if(s[i]>s[j]){
 9                 temp = s[i];
10                 s[i] = s[j];
11                 s[j] = temp;
12             }
13         }
14     }
15 
16 }
17 
18 int main(){
19     int i,j;
20     double x[10],y[10],temp;
21     while(~scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x[1],&y[1],&x[2],&y[2],&x[3],&y[3],&x[4],&y[4])){
22         if((x[3]>x[1]&&x[4]>x[1]&&x[3]>x[2]&&x[4]>x[2])||(x[3]<x[1]&&x[4]<x[1]&&x[3]<x[2]&&x[4]<x[2])||(y[3]>y[1]&&y[4]>y[1]&&y[3]>y[2]&&y[4]>y[2])||(y[3]<y[1]&&y[4]<y[1]&&y[3]<y[2]&&y[4]<y[2])){
23             printf("0.00\n");
24         }else{
25             sort(x);
26             sort(y);
27             printf("%.2lf\n",(x[3]-x[2])*(y[3]-y[2]));
28         }
29     }
30 }

 

2058  The sum problem

 

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int n,m,i,a;
 6     while(~scanf("%d %d",&n,&m)){
 7         if(n==0&&m==0){break;}
 8         for(i=sqrt(m*2);i>0;i--){
 9             a = (m-(i-1)*i/2)/i;
10             if(a*i+i*(i-1)/2==m){
11                 printf("[%d,%d]\n",a,a+i-1);
12             }
13         }
14         printf("\n");
15     }
16 }

 

posted @ 2019-03-10 20:13  Ragd0ll  阅读(562)  评论(0编辑  收藏  举报