标题:【这几天看汇编看蒙了】各种指令 来一道c语言题目 活跃一下气氛
只看楼主
打死黑狗!
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:169
注 册:2012-12-26
结帖率:66.67%
已结贴  问题点数:10 回复次数:7 
【这几天看汇编看蒙了】各种指令 来一道c语言题目 活跃一下气氛
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:

每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。
例如:0010110011 就是可能的情况。
新人分不多 写作业去了  各位 十点来结帖子 明天开学
搜索更多相关主题的帖子: 回答问题 低碳生活 电视台 
2013-01-02 18:02
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:2 
穷举。
程序代码:
/**************************************************************************/
/*   每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当*/
/*前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误*/
/*处理)。每位选手都有一个起步的分数为10分。   某获胜选手最终得分刚好是100*/
/*分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错*/
/*了吗?    如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含*/
/*有1和0的串来表示。   例如:0010110011 就是可能的情况。                  */
/**************************************************************************/
#include <stdio.h>

#define N 10
char a[N+1];

void init()
{   //字符串初始化"00000 00000"
    for (int i = 0;i < N;a[i++] = '0');
    a[i] = '\0';
}
int Add()
{   //字符串加 1,比如"00011 01000"执行后变为"00011 01001"
    //"11111 11111"时直接返回真值,是主函数循环结束
    int i = N-1;
    while (a[i] == '1')
    {
        a[i--] = '0';
        if (i < 0)    return 1;
    }
    a[i] = '1';
    return 0;
}
int fun()
{   //返回当前的字符串对应的最后分数
    int sum = 10;
    for (int i = 0;i < N;++i)
    {
        if ('0' == a[i])    sum -= i+1;
        else    sum *= 2;
        if (sum <= 0)    return -1;
        //当分数不超过 0分,最后分数必不超过0,直接返回-1
    }
    return sum;
}
int main()
{
    init();
    while (1)
    {
        if (Add())    break;
        if (100 == fun()) printf("%s\n", a);
    }
    return 0;
}
//简单说就是把所有的可能穷举,唉,想不出好算法啊!~


[ 本帖最后由 azzbcc 于 2013-1-2 19:40 编辑 ]


[fly]存在即是合理[/fly]
2013-01-02 18:39
打死黑狗!
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:169
注 册:2012-12-26
得分:0 
回复 2楼 azzbcc
大哥 能不能给个注释啊
再说c语言中也没有bool类型啊   那个Add函数还是改成int型吧 返回值0/1

世界上只有没有实力的人才整天希望被别人赞赏
2013-01-02 19:06
ksddah
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:135
注 册:2012-12-11
得分:2 
程序代码:
#include <stdio.h>
#include<math.h>

int main()
{

 int b[10];

 int sum[11];

 int temp,i,j,k,r;

 int flag;                    //存在标志 
 sum[0]=10;

 for(i=0;i<1024;i++)          //将0-1023换成10位的二进制,存放在数组b[10]中 
 {
     temp=i;
    for(k=0;k<10;k++)
     {
         b[9-k]=temp%2;
         temp=temp/2;
     }
    for(j=1;j<11;j++)
    {
        sum[j]=pow(2,b[j-1])*sum[j-1]-j*(1-b[j-1]);     //分数递推关系式 
    }
    
       printf("%4d\n",sum[10]);            //sum[10]为最终总分 
    if(sum[10]==100)
    {
        flag=1; 
        for(r=0;r<10;r++)
            printf("%4d",b[r]);
    }
    printf("\n");

 }

 return 0;
}

有些问题,大家帮忙看下,没找到总分100的情况。
收到的鲜花
  • azzbcc2013-01-02 21:45 送鲜花  1朵   附言:可以的,只不过输出太多看不到
2013-01-02 21:29
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:2 
祝楼主学习顺利。。
2013-01-02 21:36
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:2 
程序代码:
#include <stdio.h>
#define TEST(n, offset) ((n) >> (9 - (offset)) & 1)

void print(int n)
{
    int i = 0;
    while (i < 10)
        putchar('0' + TEST(n, i++));
    putchar('\n');
}

int get_score(int n)
{
    int i, score = 10;
    for (i = 0; i < 10; ++i)
        score += TEST(n, i) ? score : -(i + 1);
    return score;
}

int main(void)
{
    int i;
    for (i = 0; i < 0x400; ++i)
        if (get_score(i) == 100) print(i);
    return 0;
}

/*
0010110011
0111010000
1011010000
*/
收到的鲜花
  • azzbcc2013-01-03 00:03 送鲜花  2朵  

My life is brilliant
2013-01-02 22:12
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:2 
以下是引用打死黑狗!在2013-1-2 19:06:16的发言:

大哥 能不能给个注释啊
再说c语言中也没有bool类型啊   那个Add函数还是改成int型吧 返回值0/1
c语言中没有bool型   谁说的啊

DO IT YOURSELF !
2013-01-03 06:40
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
得分:2 
以下是引用wp231957在2013-1-3 06:40:52的发言:

c语言中没有bool型   谁说的啊
估计是用vc6.0的

喜欢睡觉 却经常熬夜
2013-01-03 17:12



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




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

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