❶ 如何用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语言的取最大值问题
程序本身就有问题