解题思路:定义两个一样大小的数组,一个数组用来存放输入的数据,另一个数组则用来记录是否是负数的判断,然后对于第一个数组遍历,如果小于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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论