當前位置:首頁 » 編程語言 » 最大裝載問題c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

最大裝載問題c語言

發布時間: 2022-06-07 21:21:22

❶ 如何用c語言編程解決最大子序列問題

#include <stdio.h>

int stringLen(char s[]) {
int len = 0;
while(s[len]) ++len;
return len;
}

int includeStr(char s[], char t[]) {
int i,j,k;
for(i = 0; s[i]; ++i) {
if(s[i] == t[0]) {
k = i + 1;
for(j = 1; t[j] == s[k] && s[k] && t[j]; ++k,++j);
if(t[j] == '\0') return i;
}
}
return -1;
}

int main() {
char s[30],t[30];
int n;
scanf("%d",&n);
while(n--) {
scanf("%s%s",t,s);
if(includeStr(s,t) >= 0)
printf("YES!\n");
else printf("NO!\n");
}
return 0;
}

❷ c語言裝載問題 急!請在這個基礎上修改

#include <stdio.h>


#include <stdlib.h>


int c1, c2, n, w[10]; int weight = 0, max = 0;


int count1 = 0, count2 = 0; //添加的代碼

int sum = 0;


int arrC1[10], arrC2[10];//用來裝C1 C2貨船上的貨物的重量

void search(int m)


{


if (m == n)


{


if (weight <= c1)


if (weight >= max)


max = weight;


}


else


{


weight += w[m];


search(m + 1);


//添加的代碼 如果max已被賦值,則c1貨船裝到了最大重量的貨物 函數立即return不再繼續執行,


//把返迴路徑上添加的重量放到c1的數組里

if (max>0 && c1>=weight && sum-weight<=c2 )


{

arrC1[count1] = w[m]; count1++; return;

}


weight -= w[m];


search(m + 1);


//添加的代碼 如果max已被賦值,則c1貨船裝到了最大重量的貨物 函數立即return不再繼續執行,


//把剔除的貨物放到c2的數組里

if (max > 0 /*&& c1 >= weight*/ && sum - weight <= c2)

{

arrC2[count2] = w[m]; count2++; return;

}


}


}


int main()


{

int i;


scanf("%d%d%d", &c1, &c2, &n);


while (n != 0)


{


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


{


scanf("%d", &w[i]); sum += w[i];


}


search(0);


if (sum - max <= c2)


{


printf("Yes ");


//添加的代碼 輸出c1貨船上的貨物


printf("c1: ");


for (int i = 0; i < count1; i++)


printf(" %d ", arrC1[i]);


//輸出c2貨船上的貨物


printf(" c2: ");


for (int i = 0; i < count2; i++)


printf(" %d ", arrC2[i]);


printf(" ");


}


else


printf("No ");


max = 0;


sum = 0;


//添加的代碼


count1 = 0;

count2 = 0;

//剛才忘了把weight清0 所以出錯了

weight = 0;

scanf("%d%d%d", &c1, &c2, &n);


}


return 0;


}

❸ C語言關於裝載問題(背包問題)的一個程序 我寫的程序輸出不滿足題意 但我檢查不出來錯誤 希望大神解決

想法:是先讓c1船盡量裝貨物是可以的,但是演算法應該不對,可以用下面的演算法

// 前k個數中去任意個數,且這些數之和為s的取法是否存在
int main()
{
int n, i, k1, k2, s, u;
cin >> n;
for (i=1; i<=2*n; i++)
cin >> A[i];
int sum = 0;
for (i=1; i<=2*n; i++)
sum += A[i];
memset(dp,0,sizeof(dp));
dp[0][0]=true;
// 外階段k1表示第k1個數,內階段k2表示選取數的個數
for (k1=1; k1<=2*n; k1++) // 外階段k1
{
for (k2=k1; k2>=1; k2--) // 內階段k2
for (s=1; s<=sum/2; s++) // 狀態s
{
//dp[k1][s] = dp[k1-1][s];
// 有兩個決策包含或不包含元素k1
if (s>=A[k1] && dp[k2-1][s-A[k1]])
dp[k2][s] = true;
}
}
// 之前的dp[k][s]表示從前k個數中取任意k個數,經過下面的步驟後
// 即表示從前k個數中取任意個數
for (k1=2; k1<=2*n; k1++)
for (s=1; s<=sum/2; s++)
if (dp[k1-1][s]) dp[k1][s]=true;
// 確定最接近的給定值sum/2的和
for (s=sum/2; s>=1 && !dp[2*n][s]; s--);
}

❹ 用c語言找最大值和最小值

用指針求含有十個元素的數組最大值和最小值

主函數參考

int main()

{

int a[10],i,maxnum,minnum;

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

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

FindMaxandMin(a,10,&maxnum,&minnum);

printf("%d %d",maxnum,minnum);

}

輸入格式:

數組

輸出格式:

最大值 最小值

輸入樣例:

1 2 3 5 4 6 7 8 9 10

輸出樣例:

10 1

(4)最大裝載問題c語言擴展閱讀

#include

int main()

{

int a[3];

int i,j,temp;

printf("請輸入3個數:");

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

for(i=0;i for(j=0;j if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

printf("最大值%d最小值%d",a[2],a[0]);

return 0;

}

❺ c語言最大值求解。。

scanf("%d %d &d",&a,&b,&c);

第三個%d被你寫成&d了

❻ 最大子列和問題(C語言)

這個MaxSubseqSum1(x,y); printf("%d",maxsum); 改成printf("%d",MaxSubseqSum1(x,y)); //這是你定義的函數int MaxSubseqSum1(int List[],int N); //int 表示返回類型要有變數接受且變數類型相同與return對應。MaxSubseqSum1表示函數名,int list[]和int N表示函數參數,形參我只講了函數調用問題,調試很煩的。說了這么多了,求個accept吧。只要除了讓我自己調試這樣抽象的問題都可以追問。

❼ C語言3個數求最大值怎麼寫啊!!!我搞了半天都不行!

參考代碼

#include <stdio.h>

int main(void) {

int a,b,c;

scanf("%d %d %d",&a,&b,&c);// 輸入3個數

int max = a;//默認最大值為a

//選出a,b中的最大值

if(max<b)

max = b;

//將前兩個中最大值與c比較,得出真正的最大值

if(max < c)

max = c;

printf("%d",max);//輸出最大值

return 0;

}

運行截圖

❽ C語言中允許的最大數是多少

1、C語言中最大的整型數據類型是long類型,佔4個位元組
C中短整型和整型均佔2個位元組,取值范圍是 -32768 ~~~ 32767
長整型佔4個位元組,取值范圍是 -2147483648 ~~~~ 2147483647
如果是無符號數的話,可以表示的數據就是
短整型和 整型: 0--- 65535
長整型: 0---4294967295
在C語言中如果一個數很大的話,超過最大的長整型,可以使用double來存儲,這樣不會影響運算精度。

2、不同類型的數據范圍是不同的:
[signed]int :-32768----32767
unsigned int:0---65535
[signed]short[int]:-32767---32768
long[int]:-2^31----(2^31-1)
unsigned long [int]:0---(2^32-1)
float:10^-37-----10^38
double:10^-307-----10^308
long double:10^-4931----10^4932

❾ 背包問題(C語言)

我一下別人的遞歸演算法,假如你有時間限時的話,那我就用動態規劃幫你重新code一個

#include <stdio.h>
#define N 100 //物品總種數不是常量,沒法根據它來決定數組的長度,只有先定義個長度了
int n;//物品總種數
double limitW;//限制的總重量
double totV;//全部物品的總價值
double maxv;//解的總價值
int option[N];//解的選擇
int cop[N];//當前解的選擇
struct {//物品結構
double weight;
double value;
}a[N];
//參數為物品i,當前選擇已經達到的重量和tw,本方案可能達到的總價值
void find(int i,double tw,double tv)
{
int k;
//物品i包含在當前方案的可能性
if(tw+a[i].weight <= limitW){
cop[i]=1;
if(i<n-1)find(i+1,tw+a[i].weight,tv);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv;
}
}
cop[i]=0;
//物品i不包含在當前方案的可能性
if(tv-a[i].value>maxv){
if(i<n-1)find(i+1,tw,tv-a[i].value);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv-a[i].value;
}
}
}
void main()
{
int k;
double w,v;
printf("輸入物品種數:");
scanf("%d",&n);
printf("輸入各物品的重量和價值:");
for(totV=0.0,k=0;k<n;++k){
scanf("%lf %lf",&w,&v);
a[k].weight = w;a[k].value = v;
totV += v;
}
printf("輸入限制重量:");
scanf("%lf",&limitW);
maxv=0.0;
for(k=0;k<n;++k)cop[k]=0;
find(0,0.0,totV);
for(k=0;k<n;++k)
if(option[k])printf("%4d",k+1);
printf("總價值為: %2f",maxv);
}

❿ c語言的取最大值問題

程序本身就有問題