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("\n");
}
return 0;
}
他没有用字符数组解决大数运算,而是将每个大数拆成一个个的小数存在整型数组中,收下在下的膝盖ToT。