3、e(char* ch){int i, len;char tmp;len = strlen( ch );for ( i = 0; i < len / 2; i++ ){ tmp = ch[ i ]; ch[ i ] = ch[ len - i - 1 ]; ch[ len - i - 1 ] = tmp;}}有的则是要求逆置到另外一段内存空间里,这样你就需用malloc了,而且注意函数的声明形式: 如果用纯c语言,恭喜你,你得用到指针的指针了: int reserve(char** a, char** b)//返回值代表操作成功与否 c++的话
4、就可以用引用: int reserve(char*& a, char*& b)3背包问题、约瑟夫问题、有序表合并(华为第4面机测)从一摞摞数里比如从20个数{12,24,22,58,47,11,19,28,33,67,81,34,27,41,50,36,88,51,21,14}中挑选出若干个数使它们的和等于100.输出所有可能的选法。解法:20个数放到a[20]数组里,然后b[20]数组里面放0或者1.然后再 sum=a[0]*b[0]+a[1]*b[1]+...+a[19]*b[19]当b=1时,说明下标为i的那个数a被选中了,否则说明a这个数没有
5、被选中于是用一个20位的二进制数k来表示b[]数组,然后将k从0...0(20个0)到1...1(20个1)遍历一遍(for循环),穷举出所有解法。代码如下:#include using namespace std;const int N=20;const int M=100;void main(){ int a[N]={12,24,22,58,47,11,19,28,33,67,81,34,27,41,50,36,88,51,21,14};int b[N];//放的0,1...int c[N];//掩码int k,sum;//下面是让c里面保存的数第
6、i位为1, 其他位都为0c[0]=1; for (int i=1;i0;k--){ sum=0; for (int j=0;j0)?1:0; sum+=a[j]*b[j]; } if (sum==M) { cout<<"以下数字相加和为"<