組合與編程
A. C語言:給定一個無序數組和一個目標值,找出數組中兩個數之和等於目標值的所有組合。咋編程
利用一個二重的循環,可以實現這個任務的求解的。
k=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]+a[j]==x)
printf("%d+%d=%d\n",a[i],a[j],x);
B. java最優組合編程問題
沒人回答是因為這個沒有現成代碼,大夥兒也不願意為了一個問題真的去寫
我說一下思路把
1、創建一個map,存儲每個點可以合作的點集,如
HashMap<String,List<String>> hp = new ...
hp.add("A", new ArrayList<String>[]{"B", "E", "F", "G"});
b
c..都這么建一遍
2、建一個Stack,按照規則1,把每種排列都枚舉出來
3、把所有結果按照個數排序
C. C語言編程10選6全組合並且滿足6個數字和問題
代碼如下:
#include <stdio.h>
//要求六個數字相加的和
#define AIM 39
int main(){
int number[10]; //用來存放1到10
int su[6];
int i,sum,j=0,k,flag=1;
for(i=0;i<10;i++)
number[i]=i+1;
for(i=0;i<6;i++)
su[i]=0;
for(su[0]=0;su[0]<10;su[0]++)
for(su[1]=0;su[1]<10;su[1]++)
for(su[2]=0;su[2]<10;su[2]++)
for(su[3]=0;su[3]<10;su[3]++)
for(su[4]=0;su[4]<10;su[4]++)
for(su[5]=0;su[5]<10;su[5]++)
{
//j++;
//printf("%d ",j);
sum=0;
for(i=0;i<6;i++)
sum+=number[su[i]];
//printf("%d ",sum);
//如果相加的和滿足要求則輸出組合
if(sum==AIM){
//判斷六個數字之中是否有重復的,並且排除排列順序不同的組合
for(k=0;k<6;k++)
for(i=k+1;i<6;i++)
if(number[su[i]]<=number[su[k]])
flag=0;
if(flag==1){
for(i=0;i<6;i++)
printf("%d ",number[su[i]]);
j++;
printf(" ");
}
flag=1;
}
}
printf("總共有%d個滿足要求的組合 ",j);
return 0;
}
其中宏定義#define AIM後面的數字為需要的總和
本代碼選出的組合中數字不能重復
和為39的組合運行結果如下:
D. 編程演算法,java,組合:求出n個數中取出k個數的組合,編程終於成功了!!!!需要的自己參考一下哈,哈哈
剛剛開始學java的飄過。。。。不會。。。。
E. 易語言編程的數字組合問題
版本 2
.程序集 窗口程序集1
.程序集變數數組1, 文本型, , "0"
.程序集變數 數組2, 文本型, , "0"
.程序集變數 文本, 文本型
.程序集變數 計次, 整數型
.程序集變數 計次1, 整數型
.程序集變數 計次2, 整數型
.子程序 __啟動窗口_創建完畢
編輯框3.是否允許多行 = 真
.計次循環首 (3, 計次)
組合框1.加入項目 (到文本 (計次), )
.計次循環尾 ()
.子程序 _組合框1_列表項被選擇
清除數組 (數組1)
清除數組 (數組2)
.計次循環首 (取文本長度 (編輯框1.內容), 計次)
加入成員 (數組1, 取文本中間 (編輯框1.內容, 計次, 1))
.計次循環尾 ()
.計次循環首 (取文本長度 (編輯框2.內容), 計次)
加入成員 (數組2, 取文本中間 (編輯框2.內容, 計次, 1))
.計次循環尾 ()
編輯框3.內容 = 「」
.如果真 (組合框1.現行選中項 = 0)
組合1 ()
返回 ()
.如果真結束
.如果真 (組合框1.現行選中項 = 1)
組合2 ()
返回 ()
.如果真結束
.如果真 (取數組成員數 (數組1) < 3)
返回 ()
.如果真結束
.計次循環首 (取數組成員數 (數組1), 計次)
.變數循環首 (計次 + 1, 取數組成員數 (數組1), 1, 計次1)
.變數循環首 (計次1 + 1, 取數組成員數 (數組1), 1, 計次2)
文本 = 數組1 [計次] + 數組1 [計次1] + 數組1 [計次2]
編輯框3.加入文本 (文本, 「 」)
.變數循環尾 ()
.變數循環尾 ()
.計次循環尾 ()
.子程序 組合1
.計次循環首 (取數組成員數 (數組1), 計次1)
.計次循環首 (取數組成員數 (數組2), 計次)
.變數循環首 (計次 + 1, 取數組成員數 (數組2), 1, 計次2)
文本 = 數組1 [計次1] + 數組2 [計次] + 數組2 [計次2]
編輯框3.加入文本 (文本, 「 」)
.變數循環尾 ()
.計次循環尾 ()
.計次循環尾 ()
.子程序 組合2
.計次循環首 (取數組成員數 (數組1), 計次)
.變數循環首 (計次 + 1, 取數組成員數 (數組1), 1, 計次1)
.計次循環首 (取數組成員數 (數組2), 計次2)
文本 = 數組1 [計次] + 數組1 [計次1] + 數組2 [計次2]
編輯框3.加入文本 (文本, 「 」)
.計次循環尾 ()
.變數循環尾 ()
.計次循環尾 ()
F. 排列組合編程問題
這個程序是求n的月之數,程序直接給出答案是1<<(n-1))+(n-1)*(1<<(n-2))。
C語言里1<<x等於2的x次方,所以這個答案很容易看出來其實是2^(n-1)+(n-1)*2^(n-2),^是乘方運算。
下面給出上式的推導過程:
因為最高的一位必然為1,所以位數為n的二進制數的個數為2^(n-1)個(這是很基本的,你要是連這個都不知道為什麼我就沒啥好說了)。
一、只考慮最高位,所有的數都是1,所以一共有2^(n-1)個1。
二、不考慮最高位,一共有(n-2)位。以最低位為例,所有數中,有一半最低位是0,另一半最低位是1,所以只考慮最低位時,一共有2^(n-1) / 2 = 2^(n-2)個1。同理,只考慮除了最高位的剩下的n-2位中的任意一位時,所有數中一共有2^(n-2)個1。這樣加起來有(n-2) * 2^(n-2)個1。
綜合一二可知,n的月之數為2^(n-1)+(n-1)*2^(n-2)。即1<<(n-1))+(n-1)*(1<<(n-2))。
G. Java編程:組合,繼承和代理的區別
組合的話,是在類中new一個對象,然後就只能調用這個對象的方法了,是死的
而你用代理的話,代理不僅要new那個對象,還要把你想調用這個對象的方法也寫出來,方法實現是通過這個new的對象來實現的,當然你也可以在方法中添加你自己想實現的功能,這樣做又有了繼承中重寫的感覺,所以說代理是繼承和組合的中庸之道,lz可以看看thinking in java7.3章 7.4章 還有網頁鏈接這篇博客,寫的很詳細
H. 6個數字,產生3個數字的組合編程
For i = 0 To 5
如已有:
a(0) = 9
a(1) = 5
a(2) = 1
a(3) = 7
a(4) = 0
a(5) = 3
因為數組中數值不重復,那麼進行全排列即可。
For j = 0 To 5
For k = 0 To 5
Text1.Text = Text1.Text & Trim(Str(a(i))) & Trim(Str(a(j))) & Trim(Str(a((k)))) & " "
Next
Text1.Text = Text1.Text & vbCrLf
Next
Next
End Sub
得到答案為:
999 995 991 997 990 993
959 955 951 957 950 953
919 915 911 917 910 913
979 975 971 977 970 973
909 905 901 907 900 903
939 935 931 937 930 933
599 595 591 597 590 593
559 555 551 557 550 553
519 515 511 517 510 513
579 575 571 577 570 573
509 505 501 507 500 503
539 535 531 537 530 533
199 195 191 197 190 193
159 155 151 157 150 153
119 115 111 117 110 113
179 175 171 177 170 173
109 105 101 107 100 103
139 135 131 137 130 133
799 795 791 797 790 793
759 755 751 757 750 753
719 715 711 717 710 713
779 775 771 777 770 773
709 705 701 707 700 703
739 735 731 737 730 733
099 095 091 097 090 093
059 055 051 057 050 053
019 015 011 017 010 013
079 075 071 077 070 073
009 005 001 007 000 003
039 035 031 037 030 033
399 395 391 397 390 393
359 355 351 357 350 353
319 315 311 317 310 313
379 375 371 377 370 373
309 305 301 307 300 303
339 335 331 337 330 333
I. C語言編程!全組合問題:從n個數中任取k個數的所有組合之積的和
#include <stdio.h>
#define MAX 4
#define SUB 2
int num[MAX] = { 1, 2, 3, 4 };
int mul = 1;
int total = 0;
void GetMul(int n, int s)
{
if (s == SUB)
{
printf("One Proct is %d.\n", mul);
total += mul;
return;
}
else
{
if (n < MAX)
{
mul = mul*num[n];
GetMul(n+1, s+1);
mul = mul/num[n];
GetMul(n+1, s);
}
}
}
void main(void)
{
GetMul(0, 0);
printf("The Total Result is %d.\n", total);
}
建議舉一反三
J. 學奧數對編程有用嗎
倒不是一定要學,但是碰到了需要做演算法優化和各種條件來回判斷的時候,那絕對是學過奧數的腦袋轉得快,編出的程序代碼短效率高。