Ⅰ 怎麼用演算法1234個十百千位上的數字取出來
package test;
public class Tester
{
public static void main ( String[] args )
{
int num = 1234;
String temp = num + "";
String reg = "(\\d)(\\d)(\\d)(\\d)";
int q = Integer.parseInt (temp.replaceAll (reg, "$1"));
int b = Integer.parseInt (temp.replaceAll (reg, "$2"));
int s = Integer.parseInt (temp.replaceAll (reg, "$3"));
int g = Integer.parseInt (temp.replaceAll (reg, "$4"));
System.out.println ("" + q + b + s + g);
}
}
Ⅱ 演算法,集合取數計算
這是一個比較典型的01背包問題,可以用動態規劃的方法來解決。
首先,對問題進行一點小小的變形,即將K看做背包容量v,而每一個集合中的數字,看作一件物品,它的重量c和價值w均為其數值本身。
然後,用子問題定義狀態:即f[i][v]表示前i件物品恰放入一個容量為v的背包可以獲得的最大價值。則其狀態轉移方程便是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
至此,即可編寫程序依照上面的狀態轉移方程對f[N][K]進行求解了。
如果要對求解的過程進行優化,可以參考01背包問題的具體講解,網上有很多,這里就不多介紹了。
Ⅲ 數列取數問題,感覺可以用動態規劃做,求具體思路,最好的O(n)的時間演算法
你這題目有問題。 又沒有說取出幾個數來。
按你的例子,應該取出5,1,3出來,和=9,而不是8
Ⅳ 有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求解。
Ⅳ m個數裡面取n個數的演算法 (財富懸賞給得不多,但這是我所有了,跪求大牛幫幫忙)
輸入n,m。然後輸入n個數(不同的,相同的演算法有點改變)求n個數中選m個的組合數!採取的是遞歸的方法!
#include <iostream>
using namespace std;
#define maxn 11
int n,m; //n,中選m個的組合數
int rcd[maxn];
int num[maxn];
void init1()
{
int i,j,val;
for (i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
}
void perm(int l,int p)
{
int i;
if(l==m)
{
for(i=0;i<l;i++)
{
printf("%d",rcd[i]);
if(i<l-1)
printf(" ");
}
printf("\n");
}
for(i=p;i<n;i++)
{
rcd[l]=num[i]; //在l的位置放上該數
perm(l+1,i+1);
}
}//perm
int main()
{
scanf("%d",&n);
scanf("%d",&m);
init1();
perm(0,0);
}
Ⅵ C語言中float型數據怎麼 取整數部分演算法 或取小數部分
分析如下:
一種簡單的辦法是直接強制轉換到int型就是整數部分。減去這個int型就是小數部分了。
代碼如下:
float n=12.223;
int x=(int)n;
float y=n-(float)x;
得出的x為數據的整數部分,y為數據的小數部分。
拓展資料:
浮點型數據類型,FLOAT 數據類型用於存儲單精度浮點數或雙精度浮點數。浮點數使用IEEE(電氣和電子工程師協會)格式。浮點類型的單精度值具有 4 個位元組,包括一個符號位、一個 8 位 excess-127 二進制指數和一個 23 位尾數。尾數表示一個介於 1.0 和 2.0 之間的數。由於尾數的高順序位始終為 1,因此它不是以數字形式存儲的。此表示形式為 float 類型提供了一個大約在-3.4E+38 和 3.4E+38 之間的范圍。
(資料來源:網路:FLOAT)
Ⅶ 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();
}}
Ⅷ 將自然數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;
}
(用單向鏈表,雙向鏈表實現見我的空間)