2301_80410070 2023-12-10 20:07 采纳率: 0%
浏览 1

输出有问题,输出有问题,输出有问题

输出有问题

#include <stdio.h>
#include <math.h>

typedef struct {
    int a;
    int b;
    int c;
} cc;

int main() {
    int n, j = 0, i = 0, t = 0, z;

    // 输入点的数量
    scanf("%d", &n);
    cc s[n];

    // 输入每个点的坐标,并计算到原点的距离
    for (i = 0; i < n; i++) {
        int x = 0;
        scanf("%d %d", &s[i].a, &s[i].b);
        x = sqrt(s[i].a * s[i].a + s[i].b * s[i].b);
        s[i].c = x;
    }

    // 冒泡排序,按照到原点的距离从小到大排序
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (s[j].c > s[j + 1].c) {
                // 交换两个点的坐标
                t = s[j].a;
                s[j].a = s[j + 1].a;
                s[j + 1].a = t;
                z = s[j].b;
                s[j].b = s[j + 1].b;
                s[j + 1].b = z;
            }
        }
    }

    // 输出排序后的点的坐标
    for (i = 0; i < n; i++) {
        printf("(%d,%d) ", s[i].a, s[i].b);
    }

    return 0;
}


  • 写回答

2条回答 默认 最新

  • 柯本 2023-12-10 20:21
    关注

    你的排序有问题,你只交换了a,b,而比较的是c(它不会因a,b值的改变而改变)。只样下次循环比较就不对了
    数据交换中,c也要交换,当然简单的你可定义t为cc类的,这样交换只要用

                     t=s[j];
                    s[j]=s[j+1];
                    s[j+1]=t;
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月10日