SindriC 2021-09-17 22:00 采纳率: 0%
浏览 55

pat乙级1005测试点1,3,4答案错误

测试给出数据,输出结果正确
思路是 将数组a中砍后的元素和数组b比对,一样的,将b中赋值0标记,再降序排列,截取非零部分输出,
代码见下

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b);

int main(void)
{
int K;
scanf("%d", &K);

int a[K], b[K], i=0;
for (; i<K; i++)
{
    scanf("%d", &a[i]);
    b[i] = a[i]; 
}

for (i=0; i<K; i++)  
{
    if (a[i] != 0)
    {
        if (a[i]%2 == 0)
        {
            a[i] /= 2;
        }
        else
        {
            if (a[i] > 100) a[i] = 1;
            a[i] = (3*a[i]+1)/2; 
        }
    }
    int j=0;
    for (; j<K; j++)
    {
        if (a[i]==b[j])
        {
            b[j]=0;
        }
    }
}

qsort(b, K, sizeof(int), cmp);

int j; 
for (i=0; i<K; i++) 
{
    if (b[i] == 0) 
    {
        j = i-1;
        break;
    }
}

for (i=0; i<j; i++)
{
    printf("%d ", b[i]);
}
printf("%d", b[j]);

return 0;

}

int cmp(const void *a, const void *b)
{
return *(int )b-(int *)a;
}

  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2021-09-17 22:02
    关注

    参考这个算法。

    #include<iostream>
    using namespace std;
     
    /*排序算法*/
    void sort(int n[],int k){
        int i,j,temp;
        for(i=0;i<k;i++)
        for(j=i+1;j<k;j++)
        {
            if(n[i]<n[j])
            {
                temp=n[i];
                n[i]=n[j];
                n[j]=temp;
            }
        }
    }
     
    int main(){
        int k,n[101];
        int i,j;
        cin>>k;
        for(i=0;i<k;i++){
            cin>>n[i];
        }
     
        for(i=0;i<k;i++){
            int num = n[i];
            if(num == 0) continue;
            while(num != 1) {
                if(num%2 == 0)//为偶数
                    num = num/2;
                else
                    num=(3*num+1)/2;//为奇数
                for(j=0;j<k;j++)
                {
                    if(n[j]==num)
                     {
                         n[j]=0;break;
                     }
                }
            }
        }
        sort(n,k);
        for(i=0;n[i]>0;i++){
            cout<<n[i]<<(n[i+1]>0?" ":"");
        }
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月17日