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