hd acm 1297

问题:n个人排队,要求女生不能单独站,可以全是男生,可以全是女生。

例子:n=7,FFFF,FFMM,FFFM,MFFF,MMFF,MMMM,MFFM(F代表女生,M代表男生)。

代码:(来自 蓝飞技术部落格的神秘力量)

#include<stdio.h>

int main(){

  int n,i,j;

  int f[1001][101] = {0};

  f[0][1] = 1;

  f[1][1] = 1;

  f[2][1] = 2;

  f[3][1] = 4;

  for( i = 4; i < 1001; ++i){

    for( j = 1; j < 101; ++j){

      f[i][j] += f[i - 1][j] + f[i - 2][j] + f[i - 4][j];//数组的每一位相加

      f[i][j + 1] += f[i][j] / 10000;//超过4位的部分保存至数组下一位中

      f[i][j] %= 10000;//每位数组只保存其中4位

     }

  }

  while(scanf("%d", &n) != EOF){

      int k = 100;

    while(!f[n][k--]);//排除前面为空的数组

    printf("%d", f[n][k + 1]);//输出结果的前四位

    for(; k > 0; --k){

      printf("%04d", f[n][k]);//输出其余的所有四位数字,若数字小于四位,则前面用0填充

    }

     printf(" ");

  }

return 0;

}

他没有用字符数组解决大数运算,而是将每个大数拆成一个个的小数存在整型数组中,收下在下的膝盖ToT。

原文地址:https://www.cnblogs.com/clljs/p/7459002.html