注册 登录
编程论坛 C++教室

可以从键盘输入一个数来指定数组的值吗

一条沙丁鱼 发布于 2015-04-07 23:43, 852 次点击
#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
    int n;
    cin>>n;
    int F[n];
    F[1]=1;
    F[2]=1;
    int i;
    for(i=3;i<n;i++)
        F[i]=(F[i-1]+F[i-2])%1007;
    cout<<setw(15)<<F[i]<<endl;
    return;
}
13 回复
#2
xzlxzlxzl2015-04-08 10:48
试下编译运行不就可以了。据我所知好像不行。
#3
rjsp2015-04-08 11:19
demo

程序代码:
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;

int main( void )
{
    size_t n;
    cin >> n;
    vector<int> F( n, 0 );

    if( F.size() > 0 )
        F[0] = 1;
    if( F.size() > 1 )
        F[1] = 1;

    for( size_t i=2; i<n; ++i )
        F[i] = (F[i-1]+F[i-2])%1007;

    if( !F.empty() )
        cout << setw(15) << F.back() <<endl;

    return 0;
}

#4
诸葛欧阳2015-04-08 13:22
用动态内存分配
int *p,n;
cin>>n;
p=mew int[n];
#5
一条沙丁鱼2015-04-08 14:23
回复 3楼 rjsp
呐,问一下size_t是什么数据类型?

[ 本帖最后由 一条沙丁鱼 于 2015-4-8 14:52 编辑 ]
#6
一条沙丁鱼2015-04-08 15:18
回复 3楼 rjsp
还有最后一个if语句是啥意思啊,就是F.empty还有F.back?
#7
rjsp2015-04-08 16:35
你是不是求 斐波那契数列 每项模除1007的结果? 1 1 2 3 5 8 13

程序代码:
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;

int main( void )
{
    unsigned n;
    cin >> n;

    unsigned a = 1;
    unsigned b = 0;
    for( unsigned i=0; i!=n%108; ++i ) // n%108 是因为每108次为一个相同序列的循环
    {
        unsigned c = (a+b)%1007;
        a = b;
        b = c;
    }
    cout << b << endl;

    return 0;
}

#8
rjsp2015-04-08 16:36
还有一个最快速的方法就是 建立一个108项的数组,直接查表就行了,时间复杂度为 O(1)
#9
一条沙丁鱼2015-04-08 17:34
回复 7楼 rjsp
是,题目要求这样:
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
#10
一条沙丁鱼2015-04-08 17:37
回复 8楼 rjsp
除了题目要求外,还有时间和内存的限制
时间限制:1.0s   内存限制:256.0MB
#11
一条沙丁鱼2015-04-08 17:42
orz.....
在自己的本本上调试运行的程序没问题,复制到练习系统里就没有对的代码
#12
一条沙丁鱼2015-04-08 17:43
回复 4楼 诸葛欧阳
是new吧?
#13
rjsp2015-04-09 08:16
回复 9楼 一条沙丁鱼
7楼的代码难道不符合你的要求吗?
#14
一条沙丁鱼2015-04-09 23:34
回复 13楼 rjsp
符合符合,谢了,就是有点小疑问能帮忙解决下吗?
1