解题思路:
输入10个数;
先找到最小数与第一个数交换;
再找到最大数与最后一个交换;
输出交换后的十个数,每个后面带空格;
注意事项:
不可以同时找到最大数和最小数然后一起交换
有同学问为什么不可以,先找到最小最大,在一次性交换,原因如下
如输入数据: 10 1 2 3有
min=1,对应下标为 1 ;max=10对应下标为0
先与第一个数交换后为:1 10 2 3 ,但是注意此时正确max下标变成了1
继续按照之前记录的max下标0进行交换,即变成1与3交换,与实际10与3交换不相符,所以出错
参考代码:
#include <stdio.h> void deal( int a[] ); int main() { int x[10]; for ( int i = 0; i < 10; i++ ) scanf( "%d", &x[i] ); deal( x ); return(0); } void deal( int a[] ) { int max = 0, x, team, l, min = a[0]; for ( int i = 0; i < 10; i++ ) //找最小数,交换 { if ( a[i] < min ) { min = a[i]; l = i; } } team = a[0]; a[0] = min; a[l] = team; for ( int k = 0; k < 10; k++ ) //找最大数,交换 { if ( a[k] > max ) { max = a[k]; x = k; } } team = a[9]; a[9] = max; a[x] = team; for ( int j = 0; j < 10; j++ ) //输出 printf( "%d ", a[j] ); }
别忘点赞哦-.-
0.0分
115 人评分
#include<stdio.h> void my_input(int* arr) { int i; for(i=0;i<10;i++) scanf("%d",(arr+i)); } void paixu(int* arr) { int temp1,temp2,x,y; int i; temp1=*(arr+0); temp2=*(arr+9); for(i=0;i<9;i++) { if(temp1>*(arr+i)) temp1=*(arr+i),x=i; if(temp2<*(arr+i)) temp2=*(arr+i),y=i; } temp1=*(arr+0); *(arr+0)=*(arr+x); *(arr+x)=temp1; temp2=*(arr+9); *(arr+9)=*(arr+y); *(arr+y)=temp2; } void my_output(int* arr) { int i; for(i=0;i<10;i++) printf("%d ",*(arr+i)); } 为什么只有五十分;
我 #include<stdio.h> int main() { int arr[10]; for(int i=0;i<10;i++) { scanf("%d",&arr[i]); } most(arr); return 0; } void most(int arr[10]) { char b[10]; int max,min; int i,j; for(i=0;i<10;i++) { b[i]=arr[i]; } for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(b[j]>b[j+1]) { int temp; temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; } } } for(int k=0;k<10;k++) { if(arr[k]==b[0]) { int temp; 那个错了?
Esther 2022-03-10 15:28:36 |
#include<stdio.h> int main() { int arr[10]; for(int i=0;i<10;i++) { scanf("%d",&arr[i]); } most(arr); return 0; } void most(int arr[10]) { char b[10]; int max,min; int i,j; for(i=0;i<10;i++) { b[i]=arr[i]; } for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(b[j]>b[j+1]) { int temp; temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; } } } for(int k=0;k<10;k++) { if(arr[k]==b[0]) { int temp; temp=arr[k]; arr[k]=arr[0]; arr[0]=temp; } if(arr[k]==b[9]) { int temp; temp=arr[k]; arr[k]=arr[9]; arr[9]=temp; } printf("%d",arr[k]); printf(" "); } return 0; }上面这个没复制完
今天你也学英语了嘛 2022-03-14 10:33:55 |
人家只移动两个位置你用冒泡排序排了整个
Esther 2022-03-17 17:16:08 |
@uq_88410785464 确实,粗心大意了。
#include<stdio.h> int main() { int a[10]; for(int i=0;i<10;i++){scanf("%d",&a[i]);} for(int i=0;i<10;i++){int b;for(int j=i+1;j<10;j++){if(a[i]>a[j]){ b=a[i]; a[i]=a[j]; a[j]=b; }}} for(int i=0;i<10;i++){printf("%d ",a[i]);} printf("\n"); } 这哪错误了,我不懂,说答案不对,我输进去值发现没不对的啊
#include <stdio.h> int min(int a[]); int max(int a[]); void exchange(int*a,int*b,int c); int main(){ int a[10];int k;int j;int i;int c; for(i=0;i<10;i++){ scanf("%d",&a[i]);} k=min(a); exchange(&a[k],&a[0],c); j=max(a); exchange(&a[j],&a[9],c); for(i=0;i<10;i++){ printf("%d ",a[i]); } return 0;} int min(int a[]){ int i,j,isprime = 1;int c; for(i=0;i<10;i++){ isprime =1; for(j=0;j<10;j++){ if(a[i]>a[j]){ isprime =0; break; } } if(isprime==1){ c=i;break;} } return c;} void exchange(int*a,int*b,int c) { c=*a;*a=*b,*b=c;} int max(int a[]){ int i,j,isprime =
#include <stdio.h> #include <string.h> int fun1 (int a[10]) { int i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } } int fun2(int a[10]) { int min,max,c,b,s,i; c=0;b=0; min = a[0];max=a[0]; for(i=1;i<10;i++) { if(a[i]<min) { min=a[i]; c=i; } if(a[i]>max) { max=a[i]; b=i; } } s=a[b];a[b]=a[9];a[9]=s; s=a[c];a[c]=a[0];a[0]=s; } int fun3(int a[10]) { int i; for(i=0;i<10;i++) { printf("%d ",a[i]); } } int main () { int a[10]; fun1(a); fun2(a); fun3(a); }
我不明白为什么只对一半: int main() { int a[10]; int t,i,j,k,l; for(i=0;i<10;i++) {scanf("%d",&a[i]);} for(k=0;k<10;k++) { for(l=k+1;l<10;l++) { if(a[k]>a[l]) { t=a[l]; a[l]=a[k]; a[k]=t; } } } for(j=0;j<10;j++) {printf("%d ",a[j]);} return 0; }
AkMoney 2022-01-05 00:31:44 |
还是交换错了,改变了下标的原因,10 1 2 3 4 5 6 7 8 9,这个数据就不行,还是楼主说的原因
虽然有点小问题,但是不妨大碍 这样做就可以 一次找到最大最小值 #include <stdio.h> int ru(int a[10]) {int i; for(i=0;i<10;i++) scanf("%d",&a[i]); return 0; } int chuli(int a[10]) {int x,i; for(i=0;i<=9;i++) {if(a[9]<a[i]) x=a[i],a[i]=a[9],a[9]=x; if(a[0]>a[i]) x=a[i],a[i]=a[0],a[0]=x;} return 0; } int shuchu(int a[10]) { int i; for(i=0;i<10;i++) printf("%d ",a[i]); return 0;} int main() {int a[10]; ru(a); chuli(a); shuchu(a); return 0; }