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 }