标题:一个竞赛题目,求指教
只看楼主
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
#include <iostream>
#include <cstring>
using namespace std;
int a[15],v[15];

void DFS(int Max,int i)
{
    if(i==11){
        if(Max==100)
        {
            for(int ii=1;ii<=10;ii++)
                cout<<v[ii];
            cout<<endl;
        }
        return;
    }
    v[i]=1;
    DFS(Max*2,i+1);    //做对
    v[i]=0;
    DFS(Max-i,i+1);//做错
}
int main()
{
    DFS(10,1);
    return 0;
}

吧你的代码按刚才我说的调整一下,就是这样
2018-03-21 15:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 9楼 花脸
其实我没啥细看代码,没留意多了个for循环以及初始赋值问题按11楼那样改就可以了~

[此贴子已经被作者于2018-3-21 15:28编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-21 15:25
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 11楼 word123
嗯好的 谢谢
2018-03-21 17:52
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 12楼 九转星河
好的
2018-03-21 17:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:4 
下面代码不知道是否符合题意:
程序代码:
#include <stdio.h>
void main()
{
    int i,j,k,s;
    char a[11]={0};
    for(i=0;i<1024;i++)
    {
        for(j=0,k=i,s=10;j<10;k/=2,j++)
        {
            a[j]=k%2+'0';
            s+=k%2?s:-j-1;
        }
        if(s==100)printf("%s\n",a);
    }
}

运行结果如下:
1011010000
0111010000
0010110011
Press any key to continue


[此贴子已经被作者于2018-3-22 08:38编辑过]


能编个毛线衣吗?
2018-03-22 08:31
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 15楼 wmf2014
不是很理解
2018-03-22 12:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 16楼 花脸
2^10=1024,遍历0-1023的二进制组合,输出符合要求的对应二进制字符串。

能编个毛线衣吗?
2018-03-22 13:06
sunus
Rank: 4
等 级:业余侠客
威 望:3
帖 子:47
专家分:234
注 册:2017-10-10
得分:4 
楼上思路是对的,程序不太好懂,我重写一下:
程序代码:
#include <stdio.h>
#define ACC 100    //最终得分

int main(int argc, char* argv[])
{
    int i, j, n;
    int iCoun;    //计分
    
    for (i = 0; i <= 1023; i++)    //10位2进制,0代表错,1代表对,0000000000到1111111111中包含了所有的可能,只要遍历就可以得出答案
    {
        iCoun = 10;    //初始分数10

        n = 1;    //掩码,用来检查对应题目的二进制位,初始0000000001代表第一题对
        for (j = 1; j <= 10; j++)
        {
            if ((i & n) == n)
                iCoun *= 2;    //答对,分数翻倍
            else
                iCoun -= j;    //答错,分数减题号
            n *= 2;    //左移一位,代表下一题
        }

        if (iCoun == ACC)    //计算出的分数=题目要求的最终得分,则2进制输出i就是答案
        {
            n = i;
            for (j = 1; j <= 10; j++)    //将i转成2进制输出
            {
                printf("%d", n % 2);
                n /= 2;
            }
            printf("\n");
        }
    }
    return 0;
}



[此贴子已经被作者于2018-3-22 16:03编辑过]

2018-03-22 15:55
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 18楼 sunus
好的 谢谢
2018-03-22 22:04
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 17楼 wmf2014
谢谢
2018-03-22 22:05



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




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

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