该程序将列出所有可能的组合,其中 + 和 - 可以放在整数之间:
假设我有 3 个整数: 输入: 4 5 6
所以,我可以放置 + 和 - 符号,有 [4] 种可能的组合: 这是: 输出: 4+5+6, 4-5-6, 4+5-6, 4-6+5
我认为这种可能组合的公式是2的N次方,其中 N 是整数之间的空格数。
这是我的代码:
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(){
int i,j,sign,space=0,z=0,x=0,y=0,count=0,a=0,d,
flag=0,combi,m,n;
srand((unsigned) time(NULL));
char string[100][100],c,hold[100][100],fin[x][y];
char num[100]="1 2 3";
for(i=0;i<strlen(num);i++){
if(isspace(num[i]))
space++;
}
combi=pow(2,space);
for(i=0;i<combi;i++){
strcpy(string[i],num);
}
for(i=0;i<combi;i++){
printf("%d: [%s]\n",i+1,string[i]);
}
// strcpy(hold,string);
for(x=0;x<combi;x++){
// check:
for(y=0;y<strlen(string);y++){
if(isspace(string[x][y])){
sign=rand()%2;
if(sign==0){
c='+';
}else{
c='-';
}
string[x][y]=c;
}
}
strcpy(hold[z],string[x]);
z++;
if(a==0){
strcpy(hold[z],string[x]);
// printf("[%d]",z);
z++;
a++;
}
else{
check:
for(d=0;d<z;d++){
check:
if(strcmp(hold[d],string[x])!=0){
flag++;
}
else if(strcmp(hold[d],string[x])==0){
for(y=0;y<strlen(string[x]);y++){
if((string[x][y])==','||(string[x][y])=='_'){
sign=rand()%2;
if(sign==0){
c='+';
}else{
c='-';
}
string[x][y]=c;
}
}
goto check;
}
///
///
if(flag==z){
strcpy(hold[z],string[x]);
z++;
a++;
flag=0;
}
}
}
}
printf("\n\n");
for(i=0;i<combi;i++){
printf("%d: %s\n",i+1,hold[i]);
}
printf("\n\n");
}
但我认为由于循环数量,这会导致内存问题 执行以找到唯一的组合。
有人可以帮助我吗?如何使这段代码可执行?
最佳答案
这是代码,要理解我做了什么,您需要绘制一棵二叉树并开始从底部添加和减去值。
#include <stdio.h>
#include <stdlib.h>
// mul is pow for ints ... just use (int)pow(x,y) and include <math.h>
int mul(int a , int x ) {
int i ;
int val = 1 ;
for(i=0 ; i< x ; i++) {
val *= a ;
}
return val ;
}
void sum(int *arr , int n , int* res) {
int * tmp = malloc(mul(2,n)*sizeof(int)) ;
int tmpSize = mul(2,n) ;
if(!tmp) {
printf("Your input size is to large") ;
return ;
}
tmp[0] = arr[0] + arr[1] ;
tmp[1] = arr[0] - arr[1] ;
int i , j , p=0 , k=2 ;
for( i=2 ; i< n ; i++ ){
for ( j=0 ; j<mul(2,i-1) ; j++ ) {
tmp[k] = tmp[p+j] + arr[i] ;
tmp[k+1] = tmp[p+j] - arr[i] ;
k += 2 ;
}
p= mul(2,i+1) - mul(2,i) - 2 ;
}
int index = mul(2,n) - mul(2,n-1) - 2 ;
for( i=0 ; i<mul(2,n-1); i++ ) {
res[i] = tmp[index+i] ;
}
}
int main(void) {
int a[4] = { 3,2,6,8 } ;
int res[16] = {0} ;
sum(a,4,res) ;
int i ;
for (i=0 ;i<8 ; i++) {
printf("%d\n",res[i]) ;
}
return 0;
}
关于C - 整数之间 2 个变量的组合 [ARRAY],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957903/