當前位置:首頁 » 操作系統 » 取數演算法題

取數演算法題

發布時間: 2023-01-06 02:07:23

① JAVA演算法題目:int數組內取數相加湊數

首先觀察數組可以排除幾個數:588,4375,5184 因為他們如何相加也不會以0結尾。限於篇幅,部分代碼如下,剩餘的循環可以自己添加下,採用窮舉法:
public class DoMain {

public void doit(){
int[] a = new int[] { 460, 720, 1250, 1800, 2200, 3080, 4100,
6510, 6900, 9000 };
for(int i1=0;i1<a.length;i1++){
for(int i2=i1+1;i2<a.length;i2++){
if(a[i1]+a[i2]==13750){
System.out.println(a[i1]+";"+a[i2]);
}
for(int i3=i2+1;i3<a.length;i3++){
if(a[i1]+a[i2]+a[i3]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]);
}
for(int i4=i3+1;i4<a.length;i4++){
if(a[i1]+a[i2]+a[i3]+a[i4]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]);
}
for(int i5=i4+1;i5<a.length;i5++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]);
}
for(int i6=i5+1;i6<a.length;i6++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]);
}
for(int i7=i6+1;i7<a.length;i7++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]+a[i7]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]+";"+a[i7]);
}

}
}
}
}
}
}
}

}

public static void main(String[] args) {
DoMain main= new DoMain();
main.doit();
}}

② JAVA演算法題目:int數組內取數相加湊數

public class Que1 {
Vector<Vector<Integer>> all = new Vector<Vector<Integer>>();
int[] array = new int[] { 460, 588, 720, 1250, 1800, 2200, 3080, 4100,
4375, 5184, 6510, 6900, 9000 };

public Que1() {
for (int i = 0; i < array.length; i++) {
Vector<Integer> v = new Vector<Integer>();
pro(v, i);
}
for (int i = 0; i < all.size(); i++) {
System.out.println(all.get(i).toString());
}
}

private boolean pro(Vector<Integer> v, int index) {
v.add(array[index]);
int sum = sum(v);
if (sum <= 13750) {
if (sum == 13750) {
all.add((Vector<Integer>) v.clone());
v.remove(v.size() - 1);
return true;
}
for (int i = index + 1; i < array.length; i++) {
if (!pro(v, i)) {
break;
}
}
v.remove(v.size() - 1);
return true;
} else {
v.remove(v.size() - 1);
return false;
}
}

private int sum(Vector<Integer> v) {
int sum = 0;
for (int i = 0; i < v.size(); i++) {
sum += v.get(i);
}
return sum;
}

public static void main(String arg[]) {
new Que1();
}

}

③ 將自然數1至100按順時針圍成一圈,首先取出1,然後順時針方向按步長L=30取數(已取出的數不再參加計數),

這其實就是一個約瑟夫環問題,你網路一下就知道了
類似於已知100個人(以編號1,2,3...100分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到30的那個人出列;他的下一個人又從1開始報數,數到30的那個人又出列;依此規律重復下去,直到圓桌周圍只剩下一個人,求這個人的編號。
數組實現
#include<iostream.h>
int main()
{
const int n=100;
int m=30;
int a[n];

for(int j=0;j<n;j++)
a[j]=j+1;
int k=1;
int i=-1;

while(1)
{

for(int j=0;j<m;)
{
i=(i+1)%n;
if(a[i]!=0)
j++;
}
if(k==n)
break;
a[i]=0;
k++;
}
cout<<a[i]<<endl;
return 0;
}

(用單向鏈表,雙向鏈表實現見我的空間)

④ 有2個人輪流取2n個數中的n個數,取數之和大者為勝。請編寫演算法,讓先取數者勝

先取者,每次取剩餘數最大的,後取者無論怎麼取,先取者所取數之和必大於後反者,必勝。

#include<stdio.h>

#define max 100

int main()

{

int i,j,a[max],left=0,right=0;

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

{

scanf("%d",&a[i]);

if(getchar()==' ') //輸入完成後直接按『ENTER』鍵就好,不要按空格後在按。換行符只能用' '來表示,'13'很讓人費解.

shu break;

}

if(i%2==1)

{

for(j=0;j<i;j=j+2)

left+=a[j];

for(j=1;j<i;j=j+2)

right+=a[j];

if(left>right)

printf("first left ");

else if(left<right)

printf("first right ");

else

printf("peace!");

}

else

printf("error!輸入的數字個數必須為偶數! ");

return 0;

}

(4)取數演算法題擴展閱讀:

{a.b}[a.b]的意義

{a.b}是指a.b的小數部分;[a.b]指a.b的整數部分,a.b={a.b}+[a.b]

若a.b ≧0,則{a.b}=0.b,[a.b]=a

若a.b ≦0,則{a.b}=1-0.b,[a.b]=a-1

axmodb+c=0

設xmodb=y轉化成ay+c=0求解。

axmodb+cxmodb+d=0

設xmodb=y轉化成ay+cy+d=0求解。

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:517
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:20
linux485 發布:2025-07-05 14:38:28 瀏覽:300
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:751
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:428
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:690
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:235
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:681
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:279
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:829