| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:一道数组相关问题
只看楼主 加入收藏
sunkiist
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2015-11-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:11 
一道数组相关问题
图片附件: 游客没有浏览图片的权限,请 登录注册

题目如上,我的想法是用数组实现,编译通过了,但是黑框缺无法实现,以下是程序。

#include<stdio.h>
int main(void)
{
    int i, n;
    int a[13] = { 0, 1, 2 };
    printf("Input n (13>=n>=2): ");
    scanf("%d", &n);
    for (i = 2; i < 13; i++)
    {
        a[i + 1] = 2 * a[i] + a[i - 1] * a[i - 2];
    }
    if (n == i)
        printf("\nf(%d)=%d\n", n, a[i]);
    return 0;
}
2015-11-09 18:57
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:5 
if (n == i)
        printf("\nf(%d)=%d\n", n, a[i]);


printf("\nf(%d)=%d\n", n, a[n]);

剑栈风樯各苦辛,别时冰雪到时春
2015-11-09 19:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
除了林月儿所说的错误,还应该将13改为14。第一,题目中n可以等于13;第二,for循环中当i==12时,a[i+1]就指向a[13]了,a必须有14个元素。
除此之外,f(12)==96048908544,我不能假定你的int一定不是8字节,但我觉得有点儿悬。

先将结果附上来
f(0)  = 0
f(1)  = 1
f(2)  = 2
f(3)  = 4
f(4)  = 10
f(5)  = 28
f(6)  = 96
f(7)  = 472
f(8)  = 3632
f(9)  = 52576
f(10) = 1819456
f(11) = 194594944
f(12) = 96048908544
f(13) = 354249036247552
注意f(12)和f(13),你所用的类型得能存得下它们才行。f(12)需要一个至少5字节的整型,f(13)需要一个至少7字节的整型。

按标准写应该这样
程序代码:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main( void )
{
    unsigned n;
    printf( "%s", "Input n (13>=n>=2): " );
    if( scanf("%u",&n)!=1 || n<2 || n>13 )
        return 1;

    uint64_t f[14] = { 0, 1, 2 };
    for( unsigned i=2; i!=n; ++i )
        f[i+1] = 2*f[i] + f[i-1]*f[i-2];
    printf( "\nf(%u)=%"PRIu64"\n", n, f[n] );

    return 0;
}

假如你用double的话,不评价,因为出题者说不定就是想让你用double,鬼知道呐


2015-11-10 09:12
sunkiist
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2015-11-9
收藏
得分:0 
回复 2楼 林月儿
还是有点想请教,既然n=i那么是a[i]或者a[n]不是应该一样的么?
2015-11-10 17:25
sunkiist
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2015-11-9
收藏
得分:0 
回复 3楼 rjsp
很谢谢!我一想0-13还真是14个,我真是太粗心了= =。虽然几个头文件还没学,不过记下了,以后肯定还有用。
2015-11-10 17:29
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:5 
回复 4楼 sunkiist
是让你把两行换成一行


[fly]存在即是合理[/fly]
2015-11-10 17:34
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 4楼 sunkiist
i是定值,n不是
你的条件判断不是所有情况都为true

剑栈风樯各苦辛,别时冰雪到时春
2015-11-10 17:35
sunkiist
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2015-11-9
收藏
得分:0 
回复 7楼 林月儿
我好像明白了,是不是那个if要放到for语句里面?否则就不能遍历判断

[此贴子已经被作者于2015-11-10 17:53编辑过]

2015-11-10 17:51
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 8楼 sunkiist
运行验证你的想法,祝你好运

剑栈风樯各苦辛,别时冰雪到时春
2015-11-10 17:55
sunkiist
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2015-11-9
收藏
得分:0 
回复 9楼 林月儿
我试了试,在未触及两个溢出int的值的时候把if放入for循环确实达到了我想要的目的。目前还无法很灵活的应用上面那位的几个函数。所以我想是用double实现,又出现了:C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2108: subscript is not of integral type
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2108: subscript is not of integral type
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2297: '*' : illegal, right operand has type 'double *'
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2108: subscript is not of integral type
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2108: subscript is not of integral type
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2296: '*' : illegal, left operand has type 'double *'
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(30) : error C2297: '*' : illegal, right operand has type 'double *'
C:\Users\Administrator\Desktop\遇到的问题\Cpp1.cpp(32) : error C2108: subscript is not of integral type
如下的错误,我搜索了一下类似错误都是pow()函数不能返回double值,可我没用pow()怎么出现相关错误,如果您有时间能指教以下用double怎么写么?
2015-11-10 18:10
快速回复:一道数组相关问题
数据加载中...
 
   



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

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