寻找最帅气的解法???
用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;
}