64,632
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void swap(char *str1,char *str2)
{
char temp;
temp=*str1;
*str1=*str2;
*str2=temp;
}
void permStr(char *str,int i)
{
//printf("%d",i);
if(i==strlen(str)-1)
printf("%s\n",str);
else
{
for(int j=i;j<strlen(str);j++)
{
//printf("i %d,j %d",i,j);
swap(&str[i],&str[j]);
permStr(str,i+1);
swap(&str[i],&str[j]);
}
}
}
void main()
{
char str[]={"abcde"};
permStr(str,0);
}
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
# define MAXN 100
int a[MAXN]; //定位数组,用于指示选取元素集合数组的位置,选取元素集合数组0 起始
void comb(int m,int r)
{
int cur;//指示定位数组中哪个成员正在移进
unsigned int count=0;
//初始化定位数组,0 起始的位置 ,开始的选择必是位置 0,1,2
for(int i=0;i<r;i++)
a[i]=i;
cur=r-1;//当前是最后一个成员要移进
do{
if (a[cur]-cur<=m-r ){
count++;
for (int j=0;j<r;j++)
cout<<setw(4)<<a[j];
cout<<endl;
a[cur]++;
continue;
}
else{
if (cur==0){
cout<<count<<endl;
break;
}
a[--cur]++;
for(int i=1;i<r-cur;i++){
a[cur+i]=a[cur]+i;
}
if(a[cur]-cur<m-r)
cur=r-1;
}
}while (1);
}
void printtime(void) //打印当前时间的函数
{
char tmpbuf[128];
time_t ltime;
struct tm *today;
time(<ime);
today = localtime(<ime );
strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S",today);
cout<<tmpbuf<<endl;
}
int main (int argc, char *argv[])
{
int m,r;
cout<<"m"<<endl;
cin>>m;
cout<<"r"<<endl;
cin>>r;
printtime();
comb(m,r);
printtime();
return(0);
}
#include<stdio.h>
int main()
{
int num[20];
int n,m,tmp;
int i,j,k;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)scanf("%d",&num[i]);
for(i=0;i<(1<<n);i++)//枚举所有组合情况
{
k=i;
tmp=0;
while(k)//计算它选中了几个数,不是选中m个的就不输出
{
if(k&1) tmp++;
k>>=1;
}
if(tmp!=m) continue;
k=i;
for(j=0;j<n;j++)//测试某一位是否为1,为1则表示它已选中
{
if(k&1) printf("%d ",num[j]);
k>>=1;
}
puts("");
}
return 0;
}
先输入n m表示n个中选 m个
然后输入n个数
#include<stdio.h>
int main()
{
int num[6]={1,3,4,6,7,8};
int i,j,tmp;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
if(j!=i) printf("%d",num[j]);
puts("");
}
return 0;
}
#include<stdio.h>
int main()
{
int num[5]={1,3,4,7,8};
int i,j,k;
for(i=0;i<=31;i++)//枚举所有组合情况
{
k=i;
for(j=0;j<5;j++)//测试某一位是否为1,为1则表示它已选中
{
if(k&1) printf("%d ",num[j]);
k>>=1;
}
puts("");
}
return 0;
}