bool InputSeqList(SeqList *L) { int i; for (i = 0;; i++) { scanf_s("%c", &(L->data[i])); if (L->data[i] == 'end') break; L->length++; } return true; }
时间: 2024-03-07 22:50:49 浏览: 58
这段代码也是用来输入顺序表的,但是同样有一些问题。
首先,scanf_s()函数的参数应该是一个指针,但是代码中传入的是&(L->data[i]),这是正确的。
其次,输入的终止条件应该是输入的字符串为"end",但是代码中使用的是'L->data[i] == 'end'',这也是不正确的。应该使用strcmp()函数来比较输入的字符串和"end"是否相同。
最后,应该在输入完最后一个字符串后再将顺序表的长度加1,否则会出现错误的长度。
正确的代码应该是这样的:
```
bool InputSeqList(SeqList *L) {
int i;
for (i = 0;; i++) {
scanf_s("%s", &(L->data[i]));
if (strcmp(L->data[i], "end") == 0)
break;
L->length++;
}
return true;
}
```
相关问题
bool InputSeqList(SeqList *L) { int i; for (i = 0;; i++) { scanf_s("%c", L->data[i]); L->length++; if (L->data[i] == 0) break; } return true; }
这段代码是用来输入顺序表的,但是有一些问题。
首先,scanf_s()函数的参数应该是一个指针,但是代码中传入的是L->data[i],这是不正确的。
其次,输入的终止条件应该是输入的字符为'\0',但是代码中使用的是0,这也是不正确的。
最后,应该在输入完最后一个字符后再将顺序表的长度加1,否则会出现错误的长度。
正确的代码应该是这样的:
```
bool InputSeqList(SeqList *L) {
int i;
for (i = 0;; i++) {
scanf_s("%c", &(L->data[i]));
if (L->data[i] == '\0')
break;
L->length++;
}
return true;
}
```
#include<stdio.h> #define MAXN 102 #define MAXM 102 //问题表示 int n; //部件数 int m; //供应商数 int cost; //限定价格 int w[MAXN][MAXM]; //w[i][j]为第i个零件在第j个供应商的重量 int c[MAXN][MAXM]; //c[i][j]为第i个零件在第j个供应商的价格 //求解结果表示 int bestx[MAXN]; int x[MAXN]; int cw=0,cc=0; int bestw=999999; bool find(int i,int j) //如果j在x[1..i-1]中出现,返回true,否则返回false { for (int k=1;k<i;k++) if (x[k]==j) return true; return false; } void dfs(int i) //求解算法 { /*补齐代码*/ } int main() { int i,j; scanf("%d%d%d",&n,&m,&cost); //输入部件数,供应商数,限定价格 for(i=1; i<=n; i++) //输入各部件的在不同供应商的重量 for(j=1; j<=m; j++) scanf("%d",&w[i][j]); for(i=1; i<=n; i++) //输入各部件的在不同供应商的价格 for(j=1; j<=m; j++) scanf("%d",&c[i][j]); dfs(1); //i从1开始搜索 for(i=1;i<=n;i++) //输出每个部件的供应商 printf("%d ",bestx[i]); printf("\n%d\n",bestw); //输出最小重量 return 0; }补全代码
以下是补全代码部分:
void dfs(int i) {
if(i>n) {
if(cw<=cost && cc<bestw) {
bestw=cc;
for(int j=1;j<=n;j++) bestx[j]=x[j];
}
return;
}
for(int j=1;j<=m;j++) {
if(find(i,j)) continue;
x[i]=j;
cw+=w[i][j];
cc+=c[i][j];
dfs(i+1);
cw-=w[i][j];
cc-=c[i][j];
}
}
首先判断是否搜索完所有部件,如果是,判断当前是否符合要求,并更新最小重量和最优解。如果未搜索完所有部件,就从所有供应商中选择一个,如果该供应商已经选过了就跳过,否则更新当前状态并进入下一层搜索。搜索完后,记得回溯状态。
阅读全文