| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1659 人关注过本帖
标题:新——半数集问题(来尝试一把吧!)
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:8 
写了一个,仅供参考。没什么注释,写的也比较烂,就当抛砖引玉吧~
程序代码:
#include <stdio.h>

int nest(int n)
{
    int i = 0;
    for (; (1 << i) <= n; ++i);
    return i;
}

int sets[64];
int set(int n, int layer)
{
    static i = 0;

    if (!i) {
    sets[i] = layer;
    for (++i; i <= layer; ++i)
        sets[i] = n >> (i-1);
    return --i;
    }

    while (i>1 && --sets[i] == 0) --i;
    if (i == 1) return i = 0;
    for (; i < layer; ++i) {
        sets[i+1] = sets[i] >> 1;
        if (sets[i+1] == 0) return i = 0;
    }
    return 1;
}

void putset()
{
    int i = sets[0];
    for (; i > 0; --i)
        printf("%d", sets[i]);
    printf(", ");
}

int main()
{
    int n, k;
    scanf("%d", &n);
    k = nest(n);

    int i = 1;
    for (; i <= k; ++i)
    {
        while (set(n, i))
            putset();
    }
    putchar('\n');

    return 0;
}

2010-02-08 00:29
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
收藏
得分:0 
回复 9楼 _DaNciNg_
//半数集问题(给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:)
//1、n包含于set(n);
//2、在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
//3、按此规则进行处理,直到不能添加自然数为止。例如,set(6)={6,16,26,126,36,136}.半数集set(6)中有6个元素。
//《下面是我自己编写的程序》
#include<iostream>
using namespace std;
int mul(int n)//自然数n的位数i,pow为10的i次方。
{
    int pow=1;
    for(int i=0;n!=0;i++)
        n/=10;
    for(int j=0;j<i;j++)
        pow*=10;
    return pow;
}
int set(int n,int &count)
{
    int m=0;
    for(int i=1;i<=n/2;i++)
    {
        m+=i*mul(n)+n;//用i乘以自然数n的位数的10次方,例如:位数为2,则乘以100;位数为3,则乘以1000;再加上n,就是半数集的元素。
        cout<<" "<<m;
        count++;
        if((m-n)/mul(n)>=2)
            count=set(i,count);
        //cout<<" "<<m;
    }
    return count;
}
void main()
{
    int count=1,n;//count是计数,n是给定的自然数。
    cout<<"Enter your number n:"<<endl;
    cin>>n;
    cout<<n;
    count=set(n,count);
    cout<<endl<<count<<endl;
}
//本程序有错误。我自己找不出来,望高手完善。谢谢!
2010-02-08 14:25
_DaNciNg_
Rank: 2
等 级:论坛游民
帖 子:81
专家分:28
注 册:2009-3-30
收藏
得分:1 
先说题目的问题,
初步判断是set函数中嵌套调用mul函数时候出现问题
举例来说
如果是n初始等于10
那么在set函数的for循环中 当i=2时,会第二次调用set函数
错误就在这里
这次传进set函数的参数是i
也就是说是2
应该是210
所以就出现了错误。

另外,希望楼主以后发帖的时候注意一下
不但最好把自己注释过的程序发出来,也把既是是错误的结果发上来,这样会好判断很多
而且  如果楼主稍微跟踪调试一下程序的话,这样的错误应该比较好找
要想学好的话,还是要自己多努力。
2010-02-08 20:38
_DaNciNg_
Rank: 2
等 级:论坛游民
帖 子:81
专家分:28
注 册:2009-3-30
收藏
得分:0 
另外的,我还是希望楼主能选择一个比较简单的方法来做
比如数组来做,应该会简单很多。
2010-02-08 20:44
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我那个就是借助于数组的,输出的结果与楼主期望的一致不呀?
2010-02-08 22:19
快速回复:新——半数集问题(来尝试一把吧!)
数据加载中...
 
   



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

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