| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1151 人关注过本帖
标题:一道oj的题,两种初始化数组的方式不同,结果一样,一个能提交一个不能提交 ...
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:4 
一道oj的题,两种初始化数组的方式不同,结果一样,一个能提交一个不能提交,
某种序列
时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
对于输入的每一行输出A99的值
样例输入
1 1 1
样例输出
69087442470169316923566147

#include <iostream>
#include <cstring>
using namespace std;

int num[100][100];

void init(int i,int t)
{
    int j=1;
    while(t)//这样提交不上 这是为什么。。。???求指点,两种初始化的方式结果相同
    {
        num[i][j++]=t%10;
        t/=10;
    }
   
    //num[i][1]=t;//这样能提交上去,,
}

int main()
{
    int a,b,c;
    while(cin>>a>>b>>c)
    {
        if(a==0&&b==0&&c==0)
            cout<<'0'<<endl;
        else
        {
            memset(num,0,sizeof(num));
            init(0,a);
            init(1,b);
            init(2,c);
            
            int len=1;
            for(int i=3;i<=99;++i)
            {
                int Carry_on=0;
                for(int j=1;j<=len;++j)
                {
                    int temp=num[i-1][j]+num[i-2][j]+num[i-3][j]+Carry_on;
                    num[i][j]=temp%10;
                    Carry_on=temp/10;
                    
                    if(j==len&&Carry_on!=0)
                        len++;
                }
            }
            for(int i=len;i>0;--i)
                cout<<num[99][i];
            cout<<endl;
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 结果 提交 输入 int num 
2018-04-11 19:24
liurhhh
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2018-4-11
收藏
得分:10 
oj系统很恶心的
2018-04-11 19:26
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 liurhhh
2018-04-11 20:39
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
另类斐波那契数列?
很显然,你做那样修改后在提供小于10的a0-a3的数据时会得到正确结果,但提供大于10的初始值时会将各数据的进行了分解,不能契合后面的初始值算法,所以不能通过。

能编个毛线衣吗?
2018-04-12 10:32
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 4楼 wmf2014
#include <iostream>  
#include <cstring>  
#include <cstdio>  
#include <algorithm>  
#include <cmath>  
using namespace std;  
int num[100][10000];  
int main(void){  
    int a, b, c, d, e, i, j, k, x;  
    while(scanf("%d%d%d", &a, &b, &c) != EOF){  
        memset(num, 0, sizeof(num));  
        i = j = k = 0;  
        while(a){  
            num[0][i++] = a % 10;  
            a /= 10;  
        }  
        while(b){  
            num[1][j++] = b % 10;  
            b /= 10;  
        }  
        while(c){  
            num[2][k++] = c % 10;  
            c /= 10;  
        }  
        e = max(max(i, j), k);  
        for(d = 3; d <= 99; ++d){  
            for(x = 0; x <= e; x++){  
                num[d][x] = num[d-1][x] + num[d-2][x] + num[d-3][x];  
            }  
            for(x = 0; x <= e + 1; x++){  
                if(num[d][x] > 9){  
                    num[d][x+1] += num[d][x]/10;  
                    num[d][x] %= 10;  
                }  
            }  
            e = x;  
        }  
        for(; e >0; --e){  
            if(num[99][e]) break;  
        }  
        for(; e >= 0; --e){  
            printf("%d", num[99][e]);  
        }  
        printf("\n");  
    }  
    return 0;  
}  

看别人这样写都能提交上去,,,

你说的那种情况也可以吧。分开相加 个位与各位相加十位与十位相加,
2018-04-12 16:57
快速回复:一道oj的题,两种初始化数组的方式不同,结果一样,一个能提交一个不能 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080601 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved