| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1575 人关注过本帖
标题:从10个数里选n个(n<10)并全部输出
只看楼主 加入收藏
云月
Rank: 1
等 级:新手上路
帖 子:17
专家分:7
注 册:2010-3-30
收藏
得分:0 
回复 楼主 雪花神剑
#include"stdio.h"
main()
{int a[10],n,t,i,p=1,sum;
a[10]={0,1,2,3,4,5,6,7,8,9};
printf("input n:");
scanf("%d",&n);
for(i=0;i<n;i++)
   { t=10-i;
     p=p*t
   }
sum=p/2;
printf("%d",sum);
}
这是一个组合分配问题,只要解决算法问题就简单了。
2010-04-08 23:52
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
其实也就是个组合的问题,在m个数中选n个数的组合、
给个例子
程序代码:
#include<stdio.h>
int b[10];
int count=0;
void solve(int a[],int curr,int index,int n)
{
    if(curr==n)
    {
        for(int i=0;i<n;i++)
        {
            printf("%d ",b[i]);
        }
        count++;
        puts("");
    }
    else
    {
        for(int i=index;i<10;i++,index++)
        {
            b[curr]=a[index];
            solve(a,curr+1,index+1,n);
        }
    }
}
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int n;
    scanf("%d",&n);
    solve(a,0,0,n);
    printf("count=%d\n",count);
    return 0;
}

离恨恰如春草,更行更远还生。
2010-04-09 00:47
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:1 
怎么都是高中函数呢
2010-04-09 07:31
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
收藏
得分:1 
回复 10楼 云月
云月
估计是你没有看清楼主所说的要求
输出所有可能的情况

而你的那个程序也有点错误
#include"stdio.h"

int main()
{
    int a[10];
    int n,t,i;
    int p=1,sum;
   
    for(i=0;i<10;i++)  //数组的赋值不能直接给的,除非是在定义的时候
    {
        a[i]=i;
    }
    printf("input n:");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        t=10-i;
        p=p*t;
    }

    sum=p/2;
    printf("%d",sum);
    return 0;
}

2010-04-09 12:46
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
不好意思,c  10  3算错了。是120个。不是360个。。。。哎,失败啊
2010-04-09 14:48
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
各位。我要得到的不是有多少种结果。这个用递归就出来了。。。   我要得到的是具体输出所有情况,
2010-04-09 14:54
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 12楼 玩出来的代码
等下我回去运行下
2010-04-09 14:59
xiaoxinwan
Rank: 2
等 级:论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
收藏
得分:1 
只要解决算法问题就简单了。
这句话经典。程序=数据结构+算法。数据结构只是一种选择,算法解决了。什么问题都可以解决了。
2010-04-09 16:22
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:1 
某人说尽量不要用递归....

你要的代码如下,经测试运行良好
程序代码:
#include <stdio.h>
#include <stdlib.h>

void printc(int *comb, int k)
{
    printf("{");
    int i;
    for (i = 0; i < k; i++)
        printf("%d, ", comb[i] + 1);
    printf("\b\b}\n");
}

int next_comb(int *comb, int k, int n)
{
    int i = k - 1;
    comb[i]++;
    while ((i > 0) && (comb[i] >= n - k + 1 + i))
    {
        i--;
        comb[i]++;
    }

    if (comb[0] > n - k)
        return 0;

    for (i = i + 1; i < k; i++)
        comb[i] = comb[i - 1] + 1;

    return 1;
}

int main()
{
    int n = 10; /* The size of the set; */
    int k;
    int comb[10]; /* comb[i] is the index of the i-th element in the
            combination */

    /* Setup comb for the initial combination */
    int i;
    printf("Put the k value:");
    scanf("%d",&k);
    for (i = 0; i < k; i++)
        comb[i] = i;

    /* Print the first combination */
    printc(comb, k);

    /* Generate and print all the other combinations */
    while (next_comb(comb, k, n))
        printc(comb, k);

    return 0;
}



人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-09 16:34
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 12楼 玩出来的代码
高手啊。

递归很强大。不过有时真的很难完全理解!

[ 本帖最后由 雪花神剑 于 2010-4-9 18:07 编辑 ]
2010-04-09 18:04
快速回复:从10个数里选n个(n<10)并全部输出
数据加载中...
 
   



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

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