I -数据的交换输出 ACM C语言题目

输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

Input

输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。

Output

对于每组输入数据,输出交换后的数列,每组输出占一行。

Sample Input

4 2 1 3 4

5 5 4 3 2 1

0

Sample Output

1 2 3 4

1 4 3 2 5

我的答案:

#include<stdio.h>

int main()

{

int n,x,min,i,a[105];

while(scanf("%d",&n)!=EOF){

if(n==0){

break;}

else{

for(i=1;i<=n;i++){

scanf("%d",&a[i]);

}

min=1;

for(i=2;i<=n;i++){

if(a[i]<=a[min]){

min=i;}

else{

break;}

}

x=a[1];

a[1]=a[min];

a[min]=x;

for(i=1;i<=n;i++){

printf("%d ",a[i]);}

printf("\n");

}

}

return 0;

}

我提交之后是答案错误,为什么呢?
我的答案:

#include<stdio.h>

int main()

{

int n,x,min,i,a[105];

while(scanf("%d",&n)!=EOF){

if(n==0){

break;}

else{

for(i=1;i<=n;i++){

scanf("%d",&a[i]);

}

min=1;

for(i=2;i<=n;i++){

if(a[i]<=a[min]){

min=i;}

else{

break;}

}

x=a[1];

a[1]=a[min];

a[min]=x;

for(i=1;i<=n;i++){

printf("%d ",a[i]);}

printf("\n");

}

}

return 0;

}

我提交之后是答案错误,为什么呢?

#include <stdio.h>

int main() {
int n,t,min,i,a[100];
while(scanf("%d",&n) == 1 && n) {
printf("请输入%d个整数:",n);
min = 0;
scanf("%d",&a[min]);
for(i = 1;i < n;i++) {
scanf("%d",&a[i]);
if(a[min] > a[i]) min = i;
}
if(min) {
t = a[0];
a[0] = a[min];
a[min] = t;
}
for(i = 0; i < n;i++) 
printf(" %d",a[i]);
printf("\n");
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-25
for(i=2;i<= n;i++){

if(a[i]<=a[min]){

min=i;}

else{

break;}
}
这段怪怪的,如果a[i]<=a[min]不成立
就会break,这样如果第二个数比第一个大,第三个数比第一个小,不就在检查第二的时候就被跳出for回圈了,break并不是跳出if判断式,而是会跳出for回圈,这样你的最小检查就没办法检查到整个array的值了
相似回答