您的位置:首页 > 其它

NYOJ 114 某种序列

2013-12-10 00:52 204 查看
NYOJ114链接
好吧  这道题说是水题中不太水的题  我卡了, 开始他妹的没注意看题  弄错了, 不过还是自己对字符串的处理不太熟悉, 这道题真心不太难的! 当然是想明白后
1:首先这道题输入三个个数, 用字符串存储, 输入后把他们三个字符串换成用整型数组存储
2:这道题是An = An-1(是n-1 可不是An - 1, n-1是一个整体)+ An-2 + An-3;所以在处理的时候是使用迭代法,依次替换掉,举个例子说:a, b, c, d;  a,b,c三个数相加得到结果给d,对于这道题来说迭代就是把b的值给a, c的值给b, d的值给c  这样就完成了对三个数的更新  下次依旧是a,b,c三个数相加依旧是按前几句说说的那样更新值  这道题的具体怎样更新在代码中这道题关键就是这了  弄明白就可以解决了 
#include<stdio.h>
#include<string.h>
char a[30], b[30], c[100];
int main()
{
int i, j, a1[100], b1[100], c1[100], len1, len2, len3, k, d[100], w, top, sum;
//好吧  我去他,自己开始脑残的在想三个字符串相加  还得迭代  怎么去迭代呢  靠, 就是没想
// 把字符串变成int型的不完了  我去他
while(scanf("%s%s%s", a, b, c) != EOF)
{
memset(a1, 0, sizeof(a1)); memset(b1, 0, sizeof(b1));
memset(c1, 0, sizeof(c1));
len1 = strlen(a); len2 = strlen(b); len3 = strlen(c);
top = 0;
for(i = len1 - 1; i >= 0; i--)
{
a1[top++] = a[i] - '0';
}
top = 0;
for( i = len2 - 1; i >= 0; i-- )
b1[top++] = b[i] - '0';
top = 0;
for( i = len3-1; i >= 0; i-- )
c1[top++] = c[i] - '0';//前面三个for循环就是转换为int型的
for(w = 3; w < 100; w++)//这就是迭代的循环了
{
memset(d, 0, sizeof(d));//这个清零是应该是不能去掉的,去掉会出错  私下自己可以试试
k = 0;//这别忘了清零
for(i = 0; i < 100; i++)
{
sum = a1[i] + b1[i] + k;
d[i] = sum % 10;
k = sum / 10;//这的k是装的进位
}
k = 0;
for(i = 0; i < 100; i++)
{
sum = d[i] + c1[i] + k;
k = sum / 10;
d[i] = sum % 10;
}
for(i = 0; i < 100; i++)//这就是在更新替换数组里面的值
{
a1[i] = b1[i];
b1[i] = c1[i];
c1[i] = d[i];
}
}
for(i = 99; i >= 0; i--)
if(c1[i])
break;
if(i < 0)//如果没有这个if判断当输入为三个零时  i比零小了, 后面会输不出值得
printf("0\n");
else
{
for(j = i; j >= 0; j--)
printf("%d", c1[j]);
printf("\n");//他妹的  我可以说我提交时晕蛋的没加这个换行不
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: