#include<stdio.h>
int main(){
//扫描
int N;
scanf("%ld\n",&N);
int cer[N],testSeat[N],examSeat[N];
for(int i=0;i<N;i++){
scanf("%ld %d %d\n",&cer[i],&testSeat[i],&examSeat[i]);
}
int M;
scanf("%d\n",&M);
int testSeatNum[M];
for(int i=0;i<N;i++){
scanf("%d ",testSeatNum[i]);
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(testSeatNum[i]==testSeat[j]){
printf("%ld %d\n",cer[j],examSeat[j]);
}
}
}
}
我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!
供参考:
#include <stdio.h>
#include <string.h>
char s[1005][18]; // 准考证号
int a[1005]; // 考试座位号
int main()
{
int i, n, ts, es;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s%d%d", s[0], &ts, &es);
strcpy(s[ts], s[0]);
a[ts] = es;
}
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &ts);
printf(i ? "\n%s %d" : "%s %d", s[ts], a[ts]);
}
return 0;
}
#include<stdio.h>
int main(){
//扫描
int N;
scanf("%d\n",&N);
long long int cer[N];
int testSeat[N],examSeat[N];
for(int i=0;i<N;i++){
scanf("%lld %d %d\n",&cer[i],&testSeat[i],&examSeat[i]);
}
int M;
scanf("%d\n",&M);
int testSeatNum[M];
for(int i=0;i<M;i++){
scanf("%d ",&testSeatNum[i]);
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(testSeatNum[i]==testSeat[j]){
printf("%lld %d\n",cer[j],examSeat[j]);
}
}
}
return 0;
}
【以下回答由 GPT 生成】
解决方案:
代码中存在一些问题,让我们来一步步解决它们:
解决方案:使用动态内存分配来创建数组。
#include <stdio.h>
#include <stdlib.h>
int main(){
// 扫描
int N;
scanf("%ld\n",&N);
int *cer = (int *)malloc(N * sizeof(int));
int *testSeat = (int *)malloc(N * sizeof(int));
int *examSeat = (int *)malloc(N * sizeof(int));
for(int i=0;i<N;i++){
scanf("%ld %d %d\n",&cer[i],&testSeat[i],&examSeat[i]);
}
// ...
// 在最后记得释放内存
free(cer);
free(testSeat);
free(examSeat);
return 0;
}
解决方案:将for(int i=0;i<N;i++)
改为for(int i=0;i<M;i++)
。
#include<stdio.h>
#include<stdlib.h>
int main(){
// ...
int M;
scanf("%d\n",&M);
int *testSeatNum = (int *)malloc(M * sizeof(int));
for(int i=0;i<M;i++){
scanf("%d ",&testSeatNum[i]);
}
// ...
free(testSeatNum);
return 0;
}
解决方案:添加一个标记变量,并在找到匹配的 testSeat 后将标记置为 1,然后使用break
语句跳出内循环。
#include<stdio.h>
#include<stdlib.h>
int main(){
// ...
for(int i=0;i<M;i++){
int found = 0;
for(int j=0;j<N;j++){
if(testSeatNum[i]==testSeat[j]){
printf("%ld %d\n",cer[j],examSeat[j]);
found = 1;
break;
}
}
if(!found) {
printf("Not Found\n");
}
}
// ...
return 0;
}
以上是对你的代码进行改正和优化的解决方案,希望对你有所帮助。如果还有其他问题,请随时提问。
【相关推荐】