user-0 提问: 在校内oj系统中，老是出现Presentation Error,有懂的哥帮忙看下

回复:
user: user-0
content: 引用 10 楼 h2plus0 的回复:这道题可能是不是要处理一种特殊情况， 就是当最大值的idx是0的时候，那时交换要判断一下 ，分别处理  。。。。 temp = a[0];     a[0] = a[min];     a[min] = temp;  // ----------------------------------- 加上这段     if(max==0) {     	max = min;     } //----------------------------------      temp = a[n - 1];     a[n - 1] = a[max];     a[max] = temp; 。。。。。。。牛逼！ 这回通过了，谢了哥！

user: user-1
content: 这道题可能是不是要处理一种特殊情况， 就是当最大值的idx是0的时候，那时交换要判断一下 ，分别处理  。。。。 temp = a[0];     a[0] = a[min];     a[min] = temp;  // ----------------------------------- 加上这段     if(max==0) {     	max = min;     } //----------------------------------      temp = a[n - 1];     a[n - 1] = a[max];     a[max] = temp; 。。。。。。。

user: user-0
content: 引用 7 楼 自信男孩 的回复:#include <stdio.h> #include<stdlib.h>    int main() {     int n, j = 1;     int max, min, temp;     int *a = NULL;      scanf("%d", &n);     //int *a = (int *)malloc(sizeof(int)*n);     a = (int *)malloc(sizeof(int)*n);     for (int i = 0; i < n; i++) {         scanf("%d", &a[i]);     }     min = max = 0;     while (j < n) {         if (a[j] > a[max])             max = j;         if (a[j] < a[min])             min = j;         j++;     }     temp = a[0];     a[0] = a[min];     a[min] = temp;     temp = a[n - 1];     a[n - 1] = a[max];     a[max] = temp;     for (j = 0; j< n - 1; j++)         printf("%d ", a[j]);     printf("%d\n", a[n - 1]);   //这里/n我加没加也都是通过不了     free(a);     return 0; } 再试一下，怀疑你提交的服务器的编译问题，编译不通过；不会吧，要是最后输出不做最后一个元素特殊处理，就都是元素+空格的话题是PE错误，就应该大致都是对的。之前有个问题我也是PE错误，就是最后空格多出来一个，不过这题就邪门了

user: user-0
content: 引用 6 楼 user-3 的回复:这样改下，再试试：#include <stdio.h> #include<stdlib.h>  int main() { 	int n,j; 	int max,min,temp; 	scanf("%d", &n); 	int *a = (int *)malloc(sizeof(int)*n); 	for ( j = 0; j < n; j++) { 		scanf("%d", &a[j]); 	} 	min=max =0;         j=1; 	while (j < n) { 		if (a[j] > a[max]) 			max = j; 		if (a[j] < a[min]) 			min = j; 		j++; 	} 	temp = a[0]; 	a[0] = a[min]; 	a[min] = temp; 	temp = a[n - 1]; 	a[n - 1] = a[max]; 	a[max] = temp;  	for ( j = 0; j < n ; j++){             if(j==0) 		printf("%d", a[j]);             else printf(" %d", a[j]);         }         free(a); 	return 0; }不行还是通不过

user: user-2
content: #include <stdio.h> #include<stdlib.h>    int main() {     int n, j = 1;     int max, min, temp;     int *a = NULL;      scanf("%d", &n);     //int *a = (int *)malloc(sizeof(int)*n);     a = (int *)malloc(sizeof(int)*n);     for (int i = 0; i < n; i++) {         scanf("%d", &a[i]);     }     min = max = 0;     while (j < n) {         if (a[j] > a[max])             max = j;         if (a[j] < a[min])             min = j;         j++;     }     temp = a[0];     a[0] = a[min];     a[min] = temp;     temp = a[n - 1];     a[n - 1] = a[max];     a[max] = temp;     for (j = 0; j< n - 1; j++)         printf("%d ", a[j]);     printf("%d\n", a[n - 1]);   //这里/n我加没加也都是通过不了     free(a);     return 0; } 再试一下，怀疑你提交的服务器的编译问题，编译不通过；

user: user-3
content: 这样改下，再试试：#include <stdio.h> #include<stdlib.h>  int main() { 	int n,j; 	int max,min,temp; 	scanf("%d", &n); 	int *a = (int *)malloc(sizeof(int)*n); 	for ( j = 0; j < n; j++) { 		scanf("%d", &a[j]); 	} 	min=max =0;         j=1; 	while (j < n) { 		if (a[j] > a[max]) 			max = j; 		if (a[j] < a[min]) 			min = j; 		j++; 	} 	temp = a[0]; 	a[0] = a[min]; 	a[min] = temp; 	temp = a[n - 1]; 	a[n - 1] = a[max]; 	a[max] = temp;  	for ( j = 0; j < n ; j++){             if(j==0) 		printf("%d", a[j]);             else printf(" %d", a[j]);         }         free(a); 	return 0; }

user: user-0
content: 引用 3 楼 user-3 的回复:上面多打了z，修改： for(int i = 0;i < n; i++)             printf("%d%c",a[i],(i<n-1)?' ':'\n');  还是不行，通过不了，我快吐了

user: user-0
content: 引用 1 楼 自信男孩 的回复:代码没问题，注意在最后加一句free(a);//释放空间  有问题的地方可能是你的编译器或者服务器上的编译器是C语言的，像 for (int i = 0; i < n-1; i++)这样的在for循环里面定义局部变量的，一般的C语言编译器不支持，是C++的特性。  鉴于上面已经定义了j，后面的循环都可以用j作为循环变量。不行啊哥！还是Wrong Answer#include <stdio.h> #include<stdlib.h>   int main() { 	int n, j = 1; 	int max, min, temp; 	scanf("%d", &n); 	int *a = (int *)malloc(sizeof(int)*n); 	for (int i = 0; i < n; i++) { 		scanf("%d", &a[i]); 	} 	min = max = 0; 	while (j < n) { 		if (a[j] > a[max]) 			max = j; 		if (a[j] < a[min]) 			min = j; 		j++; 	} 	temp = a[0]; 	a[0] = a[min]; 	a[min] = temp; 	temp = a[n - 1]; 	a[n - 1] = a[max]; 	a[max] = temp; 	for (j = 0; j< n - 1; j++) 		printf("%d ", a[j]); 	printf("%d\n", a[n - 1]);   //这里/n我加没加也都是通过不了 	free(a); 	return 0; }

user: user-3
content: 上面多打了z，修改： for(int i = 0;i < n; i++)             printf("%d%c",a[i],(i<n-1)?' ':'\n');

user: user-3
content: 最后输出修改试试：for(int i = 0;i < n; i++)             printf("%d%c",a[i],(i<n-1)?'z':'\n');

user: user-2
content: 代码没问题，注意在最后加一句free(a);//释放空间  有问题的地方可能是你的编译器或者服务器上的编译器是C语言的，像 for (int i = 0; i < n-1; i++)这样的在for循环里面定义局部变量的，一般的C语言编译器不支持，是C++的特性。  鉴于上面已经定义了j，后面的循环都可以用j作为循环变量。