当前位置:首页 » 编程语言 » 最大装载问题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语言的取最大值问题

程序本身就有问题