已知7个不同的字母a,b,c,d,e,f,g。从这7个字母中选择3个字母全部打印出来,共有35种方案。比如abc,abd,abe......。选择4个打印出来也是35种。选择5个打印出来共有21种比如abcde,abcdf,abcdg。
用c语言或者C++作。我用的是vs2015编译器。只要它能通过编译就行。能不能帮个忙稍微
写一点注释。哈哈。谢谢啦老铁。
我这边编译器老是提示cout,cin,endl没有定义。麻烦把需要导入的包在开头写一下。要不我这里编译无法通过
不要随机数,要全部组合。谢谢啦老铁
#include <cstdio>
#include <cstring>
char t[1024] = { 0 };
void PrintCombination(char* s, int n, int k, int selected = 0, int depth = 0)
{
if (selected == k)
{
printf("%s ", t);
return;
}
if (depth < n)
{
t[selected] = s[depth];
PrintCombination(s, n, k, selected + 1, depth + 1);
t[selected] = '\0';
PrintCombination(s, n, k, selected, depth + 1);
}
}
int main()
{
char* s = "abcdefg";
int n = strlen(s);
for (int i = 3; i <= 5; ++i)
{
printf("[%dC%d]:\n", n, i);
PrintCombination(s, n, i);
printf("\n");
}
return 0;
}
http://bbs.csdn.net/topics/390550326
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <vector>
using namespace std;
#define FLAG_1 1
#define FLAG_0 0
#define POS_NULL -1
void GetSelectedItems(char *flags, int flagCnt, vector<vector<int> > &vvCombin)
{
if (NULL == flags) return;
vector<int> vecItems;
for (int i = 0; i < flagCnt; ++i)
{
if (flags[i] != FLAG_0) vecItems.push_back(i);
}
vvCombin.push_back(vecItems);
}
int Find10Pos(char *flags, int flagCnt)
{
for (int i = 1; i < flagCnt; ++i)
{
if (flags[i - 1] == FLAG_1 && flags[i] == FLAG_0)
{
return i - 1;
}
}
return -1;
}
void Swap10Pos(char *flags, int pos)
{
//10->01
flags[pos + 0] = FLAG_0;
flags[pos + 1] = FLAG_1;
}
void ShiftToLeft(char *flags, int endPos)
{
int cnt = 0;
for (int i = 0; i < endPos; ++i)
{
if (flags[i] == FLAG_1)
{
++cnt;
flags[i] = FLAG_0;
}
}
for (int i = 0; i < cnt; ++i)
{
flags[i] = FLAG_1;
}
}
bool Select(int n, int m, vector<vector<int> > &vvOut)
{
if (m > n) return false;
vvOut.clear();
char *flags = new char[n];
if (NULL == flags) return false;
memset(flags, false, n);
for (int i = 0; i < m; ++i)
{
flags[i] = true;
}
GetSelectedItems(flags, n, vvOut);
int pos = Find10Pos(flags, n);
while (pos != POS_NULL)
{
Swap10Pos(flags, pos);
ShiftToLeft(flags, pos);
GetSelectedItems(flags, n, vvOut);
pos = Find10Pos(flags, n);
}
delete[]flags;
return true;
}
void main()
{
vector<vector<int> > vvCombin;
Select(10, 3, vvCombin);
int nTotalCnt = 0;
for (size_t i = 0; i < vvCombin.size(); ++i)
{
vector<int> &vecItems = vvCombin[i];
for (size_t j = 0; j < vecItems.size(); j++)
{
printf_s("%d\t", vecItems[j] + 1);
}
printf_s("\n");
++nTotalCnt;
}
printf_s("Total count:%d\n", nTotalCnt);
}
void main()
{
vector > vvCombin;
Select(10, 3, vvCombin);
int nTotalCnt = 0;
for (size_t i = 0; i < vvCombin.size(); ++i)
{
vector<int> &vecItems = vvCombin[i];
for (size_t j = 0; j < vecItems.size(); j++)
{
printf_s("%d\t", vecItems[j] + 1);
}
printf_s("\n");
++nTotalCnt;
}
printf_s("Total count:%d\n", nTotalCnt);
}
拿到ul之后 $(this).parents().next("input").val("取到的路径参数"), form:input type="hidden" 这种的话没事过,只是inputd的话就是那样写
#include
using namespace std;
void RandomChar(int i_size){
char charArray[7] = {'a','b','c','d','e','f','g'};
cout <<i_size <<"个: ";
for (int i = 0; i< i_size; i++)
{
int i_rand = rand()%(7-i);
cout<< charArray[i_rand]<<" ";
char tmp = charArray[7-i-1];
charArray[7-i-1] = charArray[i_rand];
charArray[i_rand] = tmp;
}
cout<<endl;
}
void main (){
// 3个
RandomChar(3);
// 4个
RandomChar(4);
// 5个
RandomChar(5);
getchar();
}
void RandFunction(int nCount)
{
//使用随机数
srand(time(NULL));//保证每次随机数不一样
//nCount标识你希望输出的字母个数
char buf[7]={'a','b','c','d','e','f','g'};
for(int n=0;n<nCount;++n)
{
printf("%c",buf[rand()%6]);//随机选取0-6下标位置的字符
}
}
//调用函数
printf("请输入打印字母个数");
int n=0;
scanf("%d",&n);
RandFunction(n);
#include
using namespace std;
int main()
{
while(1)
{
int num, i;
char table[7];
cout << "How many characters do you need to print?" << endl;
cin >> num;
cout << "Please select the characters that need to be printed:a,b,c,d,e,f,g" << endl;
for(i = 0; i < num; i++)
{
cin >> table[i];
}
for(i = 0; i < num; i++)
{
cout << table[i];
}
cout << end;
}
}
/*超简版O(∩_∩)O*/
printf_s("%d\t", vecItems[j] + 1);