當前位置:編程學習大全網 - 編程語言 - 關於c語言編程GA選數的問題 從1-8中任選幾個數字,使它們相加等於20,每次循環中壹個數字用壹

關於c語言編程GA選數的問題 從1-8中任選幾個數字,使它們相加等於20,每次循環中壹個數字用壹

我不明白妳為什麽壹定要隨機選定數,如果是隨機選定數妳怎麽判斷結束條件呢?

下面我是不隨機選定數的,妳看看是否有用

思路是:

定義壹個數組,用來存放已入選的數。

在主要實現函數search中,sum表示已入選的數的和,index表示數組中下壹個數的存放位置的下標,big表示從不大於big的數中選數,從最大的可選數top開始。

如果big 和sum的和比目標小,就把big寫入數組,進入下壹輪搜索,

新搜索參數index+1,big-1。

如果想等,則把big寫入數組,打印數組中直到index下標的數,也就是相加等於目標的數

如果大於,就什麽都不做了。

最後search調用自己,在big- 1 的可選數中搜索壹遍。因為是遞歸調用的,所以big-2,big-3...

直到base都會調用壹遍。

結束條件為 搜索的範圍小於可選的最小數,即沒有數可選時。

#include<stdio.h>

#define base 1

#define top 8

#define TARGET 20

int arr[8-1+2]; //to store selected numbers

void show(int index){

int i;

for(i = 0; i <= index; ++i)

printf("%d\t", arr[i]);

printf("\n");

}

void search(int sum, int index, int big){ //big is the biggest number can be chose from to continue adding up

//if big < base, sum cannot increase, exit

if(big < base)

return;

if(sum + big < TARGET){

arr[index] = big;

search(sum + big, index + 1, big - 1);

}else if (sum + big == TARGET){

arr[index] = big;

show(index);

}

search(sum, index, big - 1);

}

int main(){

search(0, 0, top);

return 0;

}

  • 上一篇:各地新年的習俗
  • 下一篇:遊戲壹半跳出來錯誤說“0X005 f111e”指令引用的“0x00000004”內存。該內存不能為“read”
  • copyright 2024編程學習大全網