解题思路:
输入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分
116 人评分
大佬们看看怎么是 答案错误50%??? #include <stdio.h> #include <stdlib.h> #define count 10 int i, j; void SCANF(int a[]) { for (i = 0; i < count; i++) { scanf("%d", &a[i]); } } void PROCESS(int a[]) { int z = 0, y = 0, p, q, temp1, temp2; for (i = 0; i < count; i++, z = 0, y = 0) { for (j = 0; j < count; j++) { if (a[i] > a[j]) { z++; } if (a[i] < a[j]) { y++; }
楼主说的很对,一次交换两个的话,在做完最小值交换后,可能会改变最大值的下标;所以要把两次判断和调换分开,我写了一个三个函数的供遇到问题的同学参考。 void tran(int a[]); void in(int a[]); void out(int a[]); int main(void) {int a[10]; in(a); tran(a); out(a); return 0;} void in(int a[]) {int i; for(i=0;i<10;i++) {scanf("%d",&a[i]);};} void out(int a[]) {int i; for(i=0;i<10;i++) {printf("%d ",a[i]);};} void tran(int a[]) {int i; int temp1,temp2,min,max,t; min=a[0]; for(i=0;i<10;i++) {if(min>a[i]) {temp1=i;min=a[i];};}; a[temp1]=a[0];a[0]=min; max=a[0]; for(i=0;i<10;i++) {if(max<a[i]) {temp2=i;max=a[i];};}; a[temp2]=a[9];a[9]=max;}
50%错误,为什么呢? #include<stdio.h> #include<math.h> int chuli(int a[10]){ int m=0,j=0,k=0; for(int i=0;i<10;i++){ if(a[i]>m){ m=a[i]; j=i; } } int n=a[0]; for(int i=0;i<10;i++){ if(a[i]<n){ n=a[i]; k=i; } } int t=0,g=0; t=a[0];g=a[9]; a[0]=a[k];a[9]=a[j]; a[k]=t;a[j]=g; } void input(int a[10]){ for(int i=0;i<10;i++){ scanf("%d",&a[i]); } } void print(int a[10]){ for(int i=0;i<10;i++){ printf("%d ",a[i]); } } int main(){ int a[10]; input(a); chuli(a); print(a); }
SevenShard 2019-09-27 20:18:53 |
拿“10 3 4 2 8 9 1 5 6 7”验证下就知道了
void Shu_Ru(); void Zheng_li(int p[], int n); void ShuChu(int *p, int n); int Shu[10], XiaoWei = 0, DaWei = 0; int main() { Shu_Ru(); Zheng_li(Shu, 10); ShuChu(Shu, 10); } void Shu_Ru() { for (int i = 0;i < 10;i++) { scanf_s("%d", &Shu[i]); } } void Zheng_li(int p[], int n) { int DaShu=p[0],XiaoShu=p[0]; for (int i = 1;i < n;i++) { if (DaShu < p[i]) { DaShu = p[i]; DaWei = i; } if (XiaoShu > p[i]) { XiaoShu = p[i]; XiaoWei = i; } } } void ShuChu(int *p, int n) { int Zhuan; Zhuan = *(p + DaWei); *(p + DaWei) = *(p + n-1); *(p + n-1) = Zhuan; Zhuan =
这是函数里面的运行函数,这部分可以输出正确答案,但是提交的时候答案错误50%,已经验证就是这一部分出了问题,求大神解答; void max(int a[]) { int *p,*t; p=t=&a[0]; int i,j; j=a[0]; for(i=1;i<10;i++) { if(*p>a[i]&&j>a[i]) { p=&a[i]; } } for(i=1;i<10;i++) { if(*t<a[i]&&j<a[i]) { t=&a[i]; } } for(i=0;i<10;i++) { if(*p==a[i]) { j=a[i]; a[i]=a[0]; a[0]=j; break; } } for(i=0;i<10;i++) { if(*t==a[i]) { j=a[i]; a[i]=a[9]; a[9]=j; break; } } mbx(a); }
题目不是要求三个函数么? 一个函数对应一个功能 那输出应该再调用另一个函数吧?
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:694 |
WU-蓝桥杯算法提高VIP-勾股数 (C++代码)浏览:1592 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |
【计算两点间的距离】 (C语言代码)浏览:1473 |
P1000 (C语言代码)浏览:868 |
C二级辅导-分段函数 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:582 |
C二级辅导-统计字符 (C语言代码)浏览:627 |
盐水的故事 (C语言代码)浏览:1524 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:585 |
奇山异水天下独绝 2020-01-31 12:41:22 |
为什么后面代码打不出来了?