大学生程序代写

http://acm.nyist.net/JudgeOnline/problem.php?pid=655

光棍的yy

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述

yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。

现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??

例如(111  可以拆分为 111 12 21  有三种)

输入

第一行输入一个n表示有n个测试数据

以下n行,每行输入m个1

(1 <= n,m <= 200)

输出

输出这种组合种数,占一行

样例输入

3

11

111

11111样例输出

2

3

8来源

hdu

上传者

yangyin1217

*///大数问题

#include<stdio.h>//计算菲波那切数列:1,2,3,5,8,13,21,34、、、、、

#include<string.h>//大数

char a[210],b1[210],b2[210],e[210];//=======AC=========

int main(){

   int str,i,n,j,s,c;//第200个数:453973694165307953197296969697410619233826  (有39位);

   scanf("%d",&n);

   while(n--){

  // scanf("%s",a);

   memset(b1,'0',sizeof(b1));

   memset(b2,'0',sizeof(b2));

    b2[0]='1';

   //str=strlen(a);

     for(j=0;j<200;j++)

   {

      strcpy(e,b2);

       for(i=0,c=0;i<=209;i++)

   {

      s=(b1[i]+b2[i]-'0'-'0')+c;

      b2[i]=s%10+'0';

          c=s/10;

   }

   strcpy(b1,e);

   } 

  for(i=209;i>=0;i--){

  if(b2[i]!='0')

    {   for(j=i;j>=0;j--)

     printf("%c",b2[j]);

  break;

     }

  }

  printf("\n");

  }

return 0;

}

// 其他AC代码

#include<stdio.h>

#include<string.h>

int main()

{

int fab[201][50];

memset(fab, 0, sizeof(fab));

int i, j, k=0;

fab[1][0]=1;

fab[2][0]=2;

fab[3][0]=3;

for(i=4; i<=200; i++)

{

for(j=0; j<=k; j++)

{

fab[i][j]+=(fab[i-1][j] + fab[i-2][j]);

if(fab[i][j]>10000)

{

fab[i][j+1]=fab[i][j]/10000;

if(k<j+1) k=j+1;

fab[i][j]-=10000;

}

}

}

char str[220];

int n, l;

scanf("%d", &n);

while(n--)

{

scanf("%s",str);

l=strlen(str);

for(i=48; i>=0; i--)

if(fab[l][i]!=0 && fab[l][i+1]==0)

{

printf("%d", fab[l][i]);

for(j=i-1; j>=0; j--)

printf("%4.4d",fab[l][j]);

break;

}

printf("\n");

}

return 0;

}

作者:chao1983210400 发表于2013-7-16 21:47:57 原文链接
阅读:12 评论:0 查看评论
05-11 12:55