Vc++中组合的实现?? 我需要一个产生 1,2,3,4的组合: 如:1 1,2 1,2,3 1,2,3,4 1,3 1,3,4 1,4 2,3 2,3,4 2,4 3,4 如何用VC实现?另外,产生的组合需要用二维动态数组存储,如何定义与保存?? 谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实组合好实现,假设1234是否应该出现设定为0和1来表示,其实其组合的情况,就是从0x1到0xf的二进制表示。比如:16进制 0x1 二进制 0001 代表组合的第一种情况 1 16进制 0x2 二进制 0010 代表组合的第一种情况 2 ..... 依次类推保存的方法 其实就是建立一个二位数组 INT nResult[16][4] = {{1}, {2},{3},{4},{1,2},....{1,2,3,4}}依次类推所以VC代码实现为:#include "stdafx.h"int main(int argc, char* argv[]){ int nResult[16][4] = {0}; int nEnum[] = {1, 2, 3, 4}; for(int i = 0x1; i< 0xf; i++) { int nCounter = 0; for(int nColumn = 0; nColumn < 4; nColumn++) { if((i>>nColumn)&0x1 == 1) { nResult[i - 1] [nCounter ++] = nEnum[nColumn]; } } } return 0;} 修正一下#include "stdafx.h"int main(int argc, char* argv[]){ int nResult[16][4] = {0}; int nEnum[] = {1, 2, 3, 4}; for(int i = 0x1; i<= 0xf; i++)//范围为:0x0-0xf { int nCounter = 0; for(int nColumn = 0; nColumn < 4; nColumn++) { if((i>>nColumn)&0x1 == 1) { nResult[i - 1] [nCounter ++] = nEnum[nColumn]; } } } return 0;} 一共是15种情况,我申请的数组多了一组。到int nResult[15][4] = {0};这个就够了 动态数组的版本const int ROW = 15;const int COL = 4;int main(){ int iRow=0, iCol=0; int nEnum[] = {1, 2, 3, 4}; //´´½¨Êý×é cout<<"Create array"<<endl; int **ppint = new int*[ROW]; for(iRow=0;iRow<ROW;iRow++){ ppint[iRow] = new int[COL]; } //½øÐмÆËã for(int i = 0x1; i<= 0xf; i++)//???:0x0-0xf { int nCounter = 0; for(int nColumn = 0; nColumn < 4; nColumn++) { if((i>>nColumn)&0x1 == 1) { ppint[i - 1] [nCounter++] = nEnum[nColumn]; } else { ppint[i - 1] [nCounter++] = 0; } } } //Êä³ö cout<<"use the array"<<endl; for(iRow=0;iRow<ROW;iRow++){ for(iCol=0;iCol<COL;iCol++){ cout<<"["<<iRow<<"]["<<iCol<<"]"<<ppint[iRow][iCol]<<";"<<endl; } cout<<endl; } //ɾ³ý cout<<endl<<"Now, delete the array"<<endl; for(iRow=0;iRow<ROW;iRow++){ delete[] ppint[iRow]; } delete[] ppint; ppint = NULL; // cout<<"Press return to exit......."<<endl; getchar(); return 0; } 如果我不能用常量ROW,COL,要每产生一个组合数,才插入。好像可以用vector方法,具体怎样,不会呀??? 为什么显示出的值不是INT nResult[16][4] = {{1}, {2},{3},{4},{1,2},....{1,2,3,4}}这种形式的?? 你说的是二位动态数组,又没说vector,晚上给你写代码 如何在MFC中使用一个自定义的ID来加载位图资源 我的从CWnd类继承的一个窗口为何收不到系统的消息呢,如LButtonDown? 求书,面向模式的软件体系结构,ACE程序员指南 (在线等) SDK如何判断字符串中的字符是中文还是英文? pow函数和CString相关问题 如何编程设定文件夹模版? 病毒,木马,系统编程的高手近来看看了 CPropertySheet的应用 关于字符串指针在SDK动态链接库中. 请问各位,MFC函数和WIN32函数有什么区别 有考过软件设计师的吗 为什么我的自制菜单无法显示
比如:16进制 0x1 二进制 0001 代表组合的第一种情况 1
16进制 0x2 二进制 0010 代表组合的第一种情况 2
..... 依次类推保存的方法 其实就是建立一个二位数组 INT nResult[16][4] = {{1}, {2},{3},{4},{1,2},....{1,2,3,4}}依次类推所以VC代码实现为:#include "stdafx.h"int main(int argc, char* argv[])
{
int nResult[16][4] = {0};
int nEnum[] = {1, 2, 3, 4};
for(int i = 0x1; i< 0xf; i++)
{
int nCounter = 0;
for(int nColumn = 0; nColumn < 4; nColumn++)
{
if((i>>nColumn)&0x1 == 1)
{
nResult[i - 1] [nCounter ++] = nEnum[nColumn];
}
}
}
return 0;
}
{
int nResult[16][4] = {0};
int nEnum[] = {1, 2, 3, 4};
for(int i = 0x1; i<= 0xf; i++)//范围为:0x0-0xf
{
int nCounter = 0;
for(int nColumn = 0; nColumn < 4; nColumn++)
{
if((i>>nColumn)&0x1 == 1)
{
nResult[i - 1] [nCounter ++] = nEnum[nColumn];
}
}
}
return 0;
}
int main(){
int iRow=0, iCol=0; int nEnum[] = {1, 2, 3, 4};
//´´½¨Êý×é
cout<<"Create array"<<endl;
int **ppint = new int*[ROW];
for(iRow=0;iRow<ROW;iRow++){
ppint[iRow] = new int[COL];
}
//½øÐмÆËã
for(int i = 0x1; i<= 0xf; i++)//???:0x0-0xf
{
int nCounter = 0;
for(int nColumn = 0; nColumn < 4; nColumn++)
{
if((i>>nColumn)&0x1 == 1)
{
ppint[i - 1] [nCounter++] = nEnum[nColumn];
}
else
{
ppint[i - 1] [nCounter++] = 0;
}
}
}
//Êä³ö
cout<<"use the array"<<endl;
for(iRow=0;iRow<ROW;iRow++){
for(iCol=0;iCol<COL;iCol++){
cout<<"["<<iRow<<"]["<<iCol<<"]"<<ppint[iRow][iCol]<<";"<<endl;
}
cout<<endl;
}
//ɾ³ý
cout<<endl<<"Now, delete the array"<<endl;
for(iRow=0;iRow<ROW;iRow++){
delete[] ppint[iRow];
}
delete[] ppint;
ppint = NULL;
//
cout<<"Press return to exit......."<<endl;
getchar();
return 0;
}
如果我不能用常量ROW,COL,要每产生一个组合数,才插入。好像可以用vector方法,具体怎样,不会呀???