标题:这道题调试都没问题,提交就是错的,哪里出问题了?
只看楼主
greenman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-12-5
结帖率:100%
已结贴  问题点数:20 回复次数:12 
这道题调试都没问题,提交就是错的,哪里出问题了?
在世界的某个角落有这样的一个国家,他们的计数全部是采用二进制的。这样的好处就是他们只需要两个阿拉伯数字就OK了!这个国家对数字是很迷信的。他们很讨厌有两个或两个以上的数字1连在一起,比如000110这个数字就不受人们的欢迎(嘿嘿,就像我们对数字4不是很欢迎一样)。这里的人们经常做的一件事情是给你一个数的位数再将它们的所有的排列写出来,再将那些不讨人喜欢的数字全部去掉,再计算出讨人喜欢的数字的个数。例如:给你一个数的位数是3,它的所有排列是000 001 010 100 110 101 011 111,很明显受人喜欢的数字是5个!也许你认为这是一件很没价值的事情,但这确是很必要的事情,比如说某一家人要做喜事,那你说选日子是不是很重要呢?有一天这件事情被你知道了,你很乐于助人,决定编一个程序来帮他们解决这个问题!
输入
第一行为测试数据的组数。每组测试数据为一行,每行只有一个值为二进制数的位数s(s<=40)。
输出
每组测试数据对应一个输出。输出包括两行。第一行为"Scenario #i:"(不包括双引号), 其中i为测试数据的组数,从1开始。第二行为受人们喜欢的位数为s的数的个数。每组测试情况以一个空行隔开。
样例输入
2
3
1
样例输出
Scenario #1:
5

Scenario #2:
2
搜索更多相关主题的帖子: 阿拉伯 二进制 国家 
2016-12-05 22:53
greenman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-12-5
得分:0 
下面是代码
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int e,n;
    int d=1;
    int a[100];
    int i;
    a[0]=1;
    a[1]=1;
    for (i=2;i<42;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    scanf_s ("%d",&e);//确定输入的组数
    while (e--)
    {
        scanf_s ("%d",&n);
        if (e==0)//当最后一组时不需要空行
        {
            if (n==0)//当n=0的时候输出也是零
            {
                printf ("Scenario #%d\n",d);
                printf ("0\n");
                d++;
            }
            if (n!=0)
            {
                printf ("Scenario #%d\n",d);
                printf ("%d\n",a[n+1]);
                d++;
            }
        }
        else
        {
            if (n==0)
            {
                printf ("Scenario #%d\n",d);
                printf ("0\n");
                printf ("\n");
                d++;
            }
            if (n!=0)
            {
                printf ("Scenario #%d\n",d);
                printf ("%d\n",a[n+1]);
                printf ("\n");
                d++;
            }
        }
    }
    return 0;
}

面对别人关于为何我要疯狂敲代码的问题,我只想说,因为热爱,所以疯狂。
2016-12-05 22:56
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
得分:4 
回复 2楼 greenman

我用你的程序在Dev++上调试了,结果出现bug,你可以看一下
2016-12-06 19:26
greenman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-12-5
得分:0 
回复 3楼 ClearningC
因为我的软件是vs2012,他的那个头文件不太一样,还有scanf_s也是vc里面新出来的一个安全检查模式好像,这些没什么关系的。

面对别人关于为何我要疯狂敲代码的问题,我只想说,因为热爱,所以疯狂。
2016-12-06 22:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:3 
&3楼改为<stdio.h>吧~

还有,我想知道运算结果是如何得来的???
能否说明一下
  for (i=2;i<42;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
是怎样得来的???

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-06 23:00
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
得分:0 
回复 4楼 greenman
如果是这样应该没问题啊,我用dev (改了头文件之类的)也可以运行啊。
2016-12-06 23:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
1位时,0开头的有1个,1开头的有1个

n位时,0开头的有a个,1开头的有b个
0开头的前面可以解0,也可以接1;1开头的前面只能接0,所以
n+1位时,0开头的有a+b个,1开头的有a个

对于斐波那契数列,最快的方法是矩阵的快速幂
2016-12-06 23:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 7楼 rjsp
弄懂了,其实是我没把题目读懂,原来000也算一个,自个儿理解时把这个漏了,然后把101当作两个1相加处理,难怪那么难

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-07 10:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用九转星河在2016-12-6 23:00:03的发言:

&3楼改为<stdio.h>吧~

还有,我想知道运算结果是如何得来的???
能否说明一下
  for (i=2;i<42;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
是怎样得来的???

生成数列 Ni = N(i-1)+N(i-2),如 1,1,2,3,5,8,13,21,......
是这个数列的一个故事吧?
2016-12-07 10:17
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:6 
这个思路试一试吧。将输入位数每一位都为1的十进制数求出,如输入3,就用7,输入4,就用15,输入5,就用31,再对0~31每个数被2除,商再被2除,连续两次余1的应该就是不受欢迎的。
2016-12-07 13:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472020-1-1.html




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

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