首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

找寻最帅气的解法?

2013-12-13 
寻找最帅气的解法???用C/C++代码实现以下要求:从1-100中挑选出10个不同的数字,请把可能的所有组合打印出来

寻找最帅气的解法???
用C/C++代码实现以下要求:从1-100中挑选出10个不同的数字,请把可能的所有组合打印出来??

对于这个问题,大家都来说说自己能想到的最帅气的解法???(最好先不要考虑递归)
找寻最帅气的解法?
找寻最帅气的解法?
[解决办法]

#include <stdio.h>
#define MAX_NUM   100
#define SEL_NUM   10

void main()
{
    int a[SEL_NUM];
    unsigned long totalcount = 0;
    for (int i=0; i<SEL_NUM; i++)
    {
        a[i] = i+1;
    }
    for (; a[0] != MAX_NUM; a[SEL_NUM-1]++)
    {
        int i = SEL_NUM-1;

        // ??ò???×éo?
        while (a[i] > MAX_NUM && i > 0 )
        {
            a[i] = a[i-1]+1;
            a[--i]++;
        }
        // 2é?′ê?·?óD?àí??a??
        for (i=0; i<SEL_NUM; i++)
        {
            for (int j=i+1; j<SEL_NUM; j++)
            {
                if (a[i] == a[j])
                {
                    break;
                }
            }
            if (j!=SEL_NUM)
            {
                break;
            }
        }
        if (i!=SEL_NUM)
        {
            continue;
        }

        // ?ú×?ì??t′òó?
        totalcount++;
        for (i=0; i<SEL_NUM; i++)
        {
            printf("%2d ", a[i]);
        }
        printf("\n");
    }
    printf("Total number is: %d\n", totalcount);
}

[解决办法]
之前写过一个,不过你这个数据太多,不知道要输出多久。。。

#include<stdio.h>
int end[10]={91,92,93,94,95,96,97,98,99,100};
int begin[10]={1,2,3,4,5,6,7,8,9,10};
bool GetNextValue(int * pData,int pos)
{
    pData[pos]++;
    if (pData[pos] <= end[pos])
        return true;
    int nNext = pos -1;
    while (nNext>=0)
    {
        pData[nNext]++;
        if (pData[nNext]<=end[nNext])
        {
            for (int i = nNext;i<pos;i++)
                pData[i+1]=pData[i]+1;
            return true ;
        }
        else 


            --nNext;
    }


    return false;
}
int main()
{
    printf ("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d \n",begin[0],begin[1],begin[2],begin[3],begin[4],begin[5],begin[6],begin[7],begin[8],begin[9]);
    long long  nTotal =1;
    while (1)
    {
        if (!GetNextValue(begin,9))
            break;
printf ("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d \n",begin[0],begin[1],begin[2],begin[3],begin[4],begin[5],begin[6],begin[7],begin[8],begin[9]);
        nTotal++;



    }
    printf ("nTotal =%lld \n",nTotal);
    getchar();


return 0;
}


[解决办法]
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long int64;
void display(int64 flag)
{
for (int i = 0; i < 64; ++i)
if (flag & (1LL << i)) printf("%d ", i+1);
puts("");
}
int main()
{
const int N = 10;
const int M = 5;
const int64 limit = 1LL << N;
int cnt = 0;
for (int64 c = (1LL << M) - 1; c < limit;)
{
display(c);
int64 x = c & -c, y = c + x;
c = ((c & ~y) / x >> 1) 
[解决办法]
 y;
++cnt;
}
printf("%d\n", cnt);
return 0;
}

[解决办法]
参考

#include <stdio.h>
#include <gsl/gsl_combination.h>

int 
main (void) 
{
  gsl_combination * c;

      c = gsl_combination_calloc (100, 10);
      do
        {
          printf ("{");
          gsl_combination_fprintf (stdout, c, " %u");
          printf (" }\n");
        }
      while (gsl_combination_next (c) == GSL_SUCCESS);
      gsl_combination_free (c);
   

  return 0;
}

热点排行