cout<<f[n][M]<<endl;改成C语言
时间: 2023-10-30 07:07:41 浏览: 99
在 C 语言中,输出语句应该使用 `printf` 函数,语法如下:
```c
printf("%d\n", f[n][M]);
```
其中 `%d` 是输出一个整数,`\n` 是换行符。完整代码示例如下:
```c
#include <stdio.h>
int main()
{
int n, M, i, j;
int c[101], w[101];
int f[101][1001];
scanf("%d%d", &n, &M);
for (i = 1; i <= n; i++) {
scanf("%d%d", &c[i], &w[i]);
}
for (i = 1; i <= n; i++) {
for (j = 1; j <= M; j++) {
if (j < c[i]) {
f[i][j] = f[i - 1][j];
} else {
int val = f[i - 1][j - c[i]] + w[i];
f[i][j] = (val > f[i - 1][j]) ? val : f[i - 1][j];
}
}
}
printf("%d\n", f[n][M]);
return 0;
}
```
相关问题
#include <iostream> using namespace std; const int MAX = 100; int main() { int n, a[MAX][MAX], b[MAX * (MAX + 1) / 2], k = 0; cout << "请输入矩阵的阶数 n:"; cin >> n; cout << "请输入 " << n << " 行 " << n << " 列的下三角矩阵:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j <= i) { cin >> a[i][j]; b[k++] = a[i][j]; } else { a[i][j] = 0; } } } cout << "\n压缩存储前的下三角矩阵为:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << a[i][j] << " "; } cout << endl; } cout << "\n压缩存储后的一维数组 b 为:\n"; for (int i = 0; i < k; i++) { cout << b[i] << " "; } cout << endl; return 0; }改成c语言
下面是将该程序转换为 C 语言的代码:
```c
#include <stdio.h>
#define MAX 100
int main()
{
int n, a[MAX][MAX], b[MAX * (MAX + 1) / 2], k = 0;
printf("请输入矩阵的阶数 n:");
scanf("%d", &n);
printf("请输入 %d 行 %d 列的下三角矩阵:\n", n, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j <= i) {
scanf("%d", &a[i][j]);
b[k++] = a[i][j];
} else {
a[i][j] = 0;
}
}
}
printf("\n压缩存储前的下三角矩阵为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n压缩存储后的一维数组 b 为:\n");
for (int i = 0; i < k; i++) {
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
```
主要的改动包括:
1. 将 `#include <iostream>` 改为 `#include <stdio.h>`,因为 C 语言中使用的是 stdio.h 头文件,而不是 iostream 头文件。
2. 将 `using namespace std;` 去掉,因为 C 语言中没有命名空间的概念。
3. 将 `cout` 和 `cin` 改为 `printf` 和 `scanf`,因为 C 语言中使用的是这两个函数来进行输入输出。
#include <iostream> #include <fstream> using namespace std; const int MAX = 50; int num[MAX]; //输入的数 int flag[MAX]; //是否已经用过 int oper[MAX]; //1--'+', 2--'-', 3--'', 4--'/' int n, m; int p[MAX]; //临时数组 int bestp[MAX]; //最优数组 int bestop[MAX]; //最优操作符 char op[] = {' ', '+', '-', '', '/'}; int k; //搜索深度逐渐加深 bool found() { int result = p[1]; for(int i=1; i<=k; i++) //计算式子的结果 { switch(oper[i]) { case 1: result += p[i+1]; break; case 2: result -= p[i+1]; break; case 3: result *= p[i+1]; break; case 4: result /= p[i+1]; break; } } return result == m; } bool backtrack(int dep) { if(dep > k+1) //深度逐渐加深 { if(found()) { copy(p, p+n+1, bestp); copy(oper, oper+n+1, bestop); return true; } else return false; } for(int j=1; j<=n; j++) //可选的数字 { if(flag[j] > 0) continue; p[dep] = num[j]; flag[j] = 1; for(int i=1; i<=4; i++) //可选的操作符 { oper[dep] = i; if(backtrack(dep+1)) return true; oper[dep] = 0; } flag[j] = 0; p[dep] = 0; } return false; } int main() { ifstream fin("无优先级运算.txt"); cout << "输入整数个数:"; fin >> n; cout << n << endl; cout << "输入目标数:"; fin >> m; cout << m << endl; cout << "输入各整数:\n"; for(int i=1; i<=n; i++) { fin >> num[i]; cout << num[i] << " "; } memset(flag, 0, sizeof(flag)); memset(p, 0, sizeof(p)); for(k=0; k<n; k++) if(backtrack(0)) { cout << "\n最少无优先级运算次数为:" << k << endl; cout << "最优无优先级运算表达式为:" << endl; for(i=1; i<=k; i++) cout << bestp[i] << op[bestop[i]]; cout << bestp[k+1]; break; } cout << endl; cout << endl; fin.close(); return 0; }改成C语言代码
把C++的语法改为C语言的语法,可参考如下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
int num[MAX]; //输入的数
int flag[MAX]; //是否已经用过
int oper[MAX]; //1--'+', 2--'-', 3--'*', 4--'/'
int n, m;
int p[MAX]; //临时数组
int bestp[MAX]; //最优数组
int bestop[MAX]; //最优操作符
char op[] = {' ', '+', '-', '*', '/'};
int k; //搜索深度逐渐加深
int found() {
int result = p[1];
for(int i=1; i<=k; i++) //计算式子的结果
{
switch(oper[i]) {
case 1: result += p[i+1]; break;
case 2: result -= p[i+1]; break;
case 3: result *= p[i+1]; break;
case 4: result /= p[i+1]; break;
}
}
return result == m;
}
int backtrack(int dep) {
if(dep > k+1) //深度逐渐加深
{
if(found()) {
memcpy(bestp, p, sizeof(p));
memcpy(bestop, oper, sizeof(oper));
return 1;
}
else
return 0;
}
for(int j=1; j<=n; j++) //可选的数字
{
if(flag[j] > 0) continue;
p[dep] = num[j];
flag[j] = 1;
for(int i=1; i<=4; i++) //可选的操作符
{
oper[dep] = i;
if(backtrack(dep+1))
return 1;
oper[dep] = 0;
}
flag[j] = 0;
p[dep] = 0;
}
return 0;
}
int main() {
FILE *fin = fopen("无优先级运算.txt", "r");
if(!fin) {
printf("打开文件失败!\n");
return 1;
}
printf("输入整数个数:");
fscanf(fin, "%d", &n);
printf("%d\n", n);
printf("输入目标数:");
fscanf(fin, "%d", &m);
printf("%d\n", m);
printf("输入各整数:\n");
for(int i=1; i<=n; i++) {
fscanf(fin, "%d", &num[i]);
printf("%d ", num[i]);
}
memset(flag, 0, sizeof(flag));
memset(p, 0, sizeof(p));
for(k=0; k<n; k++)
if(backtrack(0)) {
printf("\n最少无优先级运算次数为:%d\n", k);
printf("最优无优先级运算表达式为:\n");
for(int i=1; i<=k; i++)
printf("%d%c", bestp[i], op[bestop[i]]);
printf("%d\n", bestp[k+1]);
break;
}
fclose(fin);
return 0;
}