原题链接:[编程入门]自定义函数之整数处理
解题思路:
输入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分
104 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
一开始以为是一道很简单的题目,后面怎么提交都过不了,来到这里才恍然大悟犯了这种错,学到了学到了 #include<stdio.h> int main(){ int a[10], i, min = 0, max = 0, t; for(i = 0; i < 10; i++) scanf("%d", &a[i]); for(i = 0; i < 10; i++){ if(a[i] > a[max]) max = i; } t = a[9]; a[9] = a[max]; a[max] = t; for(i = 0; i < 10; i++){ if(a[i] < a[min]) min = i; } t = a[0]; a[0] = a[min]; a[min] = t; for(i = 0; i < 10; i++) printf("%d ", a[i]); return 0; }#include<iostream> #include<algorithm> int main(int argc, char *argv[]){ int a[10]; for(int i = 0; i<10; i++){ std::cin>>a[i]; } int min = a[0]; int max = a[9]; int t,u; for(int i = 0; i<10; i++){ if(a[i]<min){ min = a[i]; t = i; } } std::swap(a[0],a[t]); for(int i = 0; i<10; i++){ if(a[i]>max){ max = a[i]; u = i; } } std::swap(a[9],a[u]); for(int i = 0; i<10; i++){ std::cout<<a[i]<<" "; } }#include<stdio.h> #include<string.h> int main() { int b[10]; int shuru(int x[]); int culi(int x[]); int shucu(int x[]); shuru(b); culi(b); shucu(b); } int shuru(int x[]) { for (int i = 0; i < 10; i++) scanf_s("%d",&x[i]); return 0; } int culi(int x[]) { int t = 0; for (int i = 1,j=0; i < 10; i++) //找最小数 { if (x[j] > x[i]) //用已知的最小数跟下一个数比较 j = i; if(i == 9) { t = x[0]; x[0] = x[j]; x[j] = t; } } for (int i = 1, j = 0; i < 10; i++) //找最大数 { if (x[j] < x[i]) // 用已知的最大数跟下一个数比较 j = i; if (i == 9) { t = x[9]; x[9] = x[j]; x[j] = t; } }大佬们看看怎么是 答案错误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;}