二楞子和狗剩子 2022-03-07 19:02 采纳率: 100%
浏览 36
已结题

我这个代码哪里不对了呢,求解答

#include<stdio.h>
#include<stdlib.h>
int main()//程序目的:将所有数字中奇数从大到小排序,偶数从小到大排序,奇数在前,偶数在后
{
int n, * p,i=0,j=0,k=0,temp,min=0;
scanf_s("%d", &n);
p =(int*) malloc(sizeof(int) * n);
if (p == NULL) exit(0);
for (i = 0; i < n; i++)
scanf_s("%d", p + i);
for(i=0;i<n;i++)
for (j = 0; j < n - i-1; j++)
if((p+j)<*(p+j+1))
{
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}//冒泡排序将所有数由大到小排序
for (i=n-1; i >= 0; i--)
{
if (
(p + i) % 2 == 0) min = (p + i);
break;
}//记录最小的偶数
printf("%d", min);
i = 0; j = 0;
while(
(p + i) != min)//不是最小偶数时执行以下程序
{
if(*(p + i) % 2 == 0)//如果是偶数将其移动到目标位置其余所有数前移
{
for (j = i; j < n-k-i - 1; j++)
{
temp = *(p + j);
*(p + j) = *(p + j + 1);
(p + j + 1) = temp;
}
k++;
}
if (
(p + i) % 2 != 0) i++;//如果是奇数,跳到下一个数
}
for (i = 0; i < n; i++)
printf("%d ", *(p + i));
free(p);
return 0;
}

img

  • 写回答

2条回答 默认 最新

  • a5156520 2022-03-07 19:24
    关注

    应该是排序偶数的那一段代码,出了问题,发现偶数就把他交换到下一个数,似乎不能达到排序偶数的目的,改了一下,如下:

    #include<stdio.h>
    #include<stdlib.h>
    int main()//程序目的:将所有数字中奇数从大到小排序,偶数从小到大排序,奇数在前,偶数在后
    {
        int n, * p,i=0,j=0,k=0,temp,min=0;
        scanf("%d", &n);
        p =(int*) malloc(sizeof(int) * n);
        if (p == NULL) exit(0);
        for (i = 0; i < n; i++)
            scanf("%d", p + i);
        for(i=0;i<n;i++)
            for (j = 0; j < n - i-1; j++)
            if(*(p+j)<*(p+j+1))
            {
                temp = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
            
            //冒泡排序将所有数由大到小排序
            
    //    for (i=n-1; i >= 0; i--)
    //    {
    //        if (*(p + i) % 2 == 0) min = *(p + i);
    //        break;
    //    }//记录最小的偶数
    //    
    //    printf("%d", min);
    //    
        i = 0; j = 0;
        for(i=0;i<n;i++){
            
            if(*(p+i)%2==0){
                
                for(j=n-1-k;j>=0;j--){
                    if(*(p+j)%2==0){
                        *(p+j)=*(p+i);
                        break;
                    }
                }
            }
        } 
        
    //    while(*(p + i) != min)//不是最小偶数时执行以下程序
    //    {
    //        if(*(p + i) % 2 == 0)//如果是偶数将其移动到目标位置其余所有数前移
    //        {
    //            for (j = i; j < n-k-i - 1; j++)
    //            {
    //                temp = *(p + j);
    //                *(p + j) = *(p + j + 1);
    //                *(p + j + 1) = temp;
    //            }
    //            k++;
    //        }
    //        
    //        if (*(p + i) % 2 != 0) 
    //            i++;//如果是奇数,跳到下一个数
    //    }
    //    
        for (i = 0; i < n; i++)
            printf("%d ", *(p + i));
            
        free(p);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 修改了问题 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机