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)]--------------------- 作者:程序小白_龙 来源: 原文: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 }
转载于:https://www.cnblogs.com/Ragd0ll/p/10498821.html
相关资源:课程资源 杭电OJ1000-1099答案