解题思路:定义两个一样大小的数组,一个数组用来存放输入的数据,另一个数组则用来记录是否是负数的判断,然后对于第一个数组遍历,如果小于0,则转化为它的相反数,否则不做处理,然后使用冒泡排序或者选择排序(我这里用的是选择排序)将第一个也就是存放数据的数组进行排序,关键在于你还要对第二个数组执行与第一个数组相同的操作,否则数据位置变了,之前对负数的记录也就没用了,最后根据第二个数组判断输出是否带负号。
注意事项:
第二个数组也要跟着第一个数组进行交换操作。
参考代码:
int main()
{
int arr[100] = { 0 };
int n = 1;
while (scanf("%d",&n)!=EOF&&n) {
int arr2[100] = { 0 };
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
for (int i = 0; i < n; i++) {
if (arr[i] < 0)
arr[i] = 0 - arr[i], arr2[i] = 1;
}
for (int i = 0; i < n; i++) {
for (int j = i; j >= 0; j--) {
if (arr[j - 1] < arr[j] && j - 1 >= 0) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
temp = arr2[j];
arr2[j] = arr2[j - 1];
arr2[j - 1] = temp;
}
}
}
for (int i = 0; i < n; i++) {
if (arr2[i] == 1)
printf("-%d", arr[i]);
else
printf("%d", arr[i]);
if (i != n - 1)
printf(" ");
}
printf("\n");
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复