每日一结 1.3

今天做了下排序系列题目,明天再去磕二叉树。

直接插入排序

题目描述

利用直接插入排序算法实现线性表的排序。要求输出第k趟排序的结果。例如原来线性表为:26,12,25,4,36,15,21,第一趟直接排序排序结果为: 12,26,25,4,36,15,21,第二趟直接插入排序结果为: 12,25,26, 4,36,15,21。

输入

输入包含若干个测试用例,第一行为测试用例个数。每个测试用例占3行,第一个为元素个数n(1<=n<=1000),第二行为n个元素值(整数),即需要排序的元素个数,第三行为k(1<=k<=n-1),即要求的第k趟排序结果。

输出

对每一测试用例,用一行输出第k趟排序结果,用空格隔开。

样例输入 复制

1
5
2 4 1 9 7
3

样例输出 复制

1 2 4 9 7

思路:一开始用的冒泡排序,oj上一直卡在67%,然后发现他是将第一个数和第二个数比较,如果,大于,则交换位置。并直接将第二个数(即下一个数与后面的比较)的过程算作一次。用这个思路便能解题。

 小兔子的果园

题目描述

小兔子有n个果园,果园里有许多果树,有苹果树,芒果树,香蕉树,李子树,无花果树。
终于到了丰收的季节,小兔子从每个果园采了许多的水果,现在小兔子想给每个果园的产量排序。
因为小兔子爱吃芒果,所以按芒果的数量从大到小排序,如果芒果的数量相同,那就按照其他水果的总数量从小到大排序。
不会存在芒果数量相同且其他水果的总数量相同的情况。

输入

第一行输入一个n,代表n个果园(1<=n<=10)
接下来n行,每行五个数,分别代表小兔子从果园里采摘的苹果数量,芒果数量,香蕉数量,李子数量,无花果数量
每个水果的数量不超过10,且没有负数。

输出

输出n个果园产量排序后的结果

样例输入 复制

5
1 2 3 4 5
1 3 3 4 5
1 4 2 2 2
1 1 1 1 1
1 4 1 1 1

样例输出 复制

1 4 1 1 1
1 4 2 2 2
1 3 3 4 5
1 2 3 4 5
1 1 1 1 1

思路:能好的运用结构体就能做出来。将芒果单独拎出来比较,芒果数相等用其他水果总数比较,最后用冒泡排序就解决啦

#include<stdio.h>
struct tree
{
    int a,b,c,d,e,f;
} s[10];
struct tree t[10];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%d %d %d %d %d",&s[i].a,&s[i].b,&s[i].c,&s[i].d,&s[i].e);
   s[i].f=s[i].a+s[i].c+s[i].d+s[i].e;
    }
    for(int i=0; i<n-1; i++)
    {
        for(int j=0; j<n-i-1; j++)
        {
            if(s[j].b<s[j+1].b)
            {
                t[j]=s[j];
                s[j]=s[j+1];
                s[j+1]=t[j];
            }
            if(s[j].b==s[j+1].b)
            {
                if(s[j].f>s[j+1].f)
                {
                    t[j]=s[j];
                    s[j]=s[j+1];
                    s[j+1]=t[j];
                }
            }
        }
    }
    for(int i=0; i<n; i++)
    {
        printf("%d %d %d %d %d\n",s[i].a,s[i].b,s[i].c,s[i].d,s[i].e);

    }
}

竞选主席

题目描述

又来到了四年一度的主席竞选大赛,然后有n个候选人,编号分别是从1-n,现在需要你统计出票数最多的候选人是谁

输入

输入n

然后依次是n行

下面第几行就代表第几个候选人的票数

输出

输出最多票数的候选人编号以及票数

样例输入

5
98765
12365
87954
1022356
985678

样例输出

4
1022356

提示

票数可能会达到100位数字

n<=20
思路:题目说到票数可能会达到100位数字,很明显要用字符串来做,用大数存储票数,难免会出现问题。设定好字符串后,先比较字符串长度,长度相等则用strcmy函数逐位比较即可。也是容易解出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值