刷题之路(1)

1:现在有n个学生,每个学生都有一个能力值ai,为了方便管理,决定将n个学生分成k组(每个小组里至少要有一个人)。

 如果一个小组有一个能力在该小组极其突出的学生,这个小组就比较容易管理。
这个小组的管理方便度f(i)=第i个小组能力值最大的-第i个小组能力值最小的, 
即f(i)=max(aj∈team i)-min(aj∈team i), 现在想知道f(1)+f(2)+........f(k)的最大值

输入

多组输入
第一行两个整数分别为n,k。
第二行n个数分别代表a1,a2...ak. 
1<=n<=1000
1<=k<=n
1<=a[i]<=10000
 

输出

一个整数表示最大的管理方便度之和。

题解:

#include<stdio.h>
#include<string.h>
int main()
{
    int n,k,sum=0;
    while(scanf("%d %d",&n,&k)!=EOF)//多组输入
    {
        char a[1000];//定义一个数组,也可以直接inta[1000]
        for(int i=0; i<n; i++)
            scanf("%s",&a[i]);//将n个学生存入到数组a中
        for(int j=0; j<n-1; j++)
            for(int i=0; i<n-j-1; i++)
                if(a[i]<a[i+1])
                {
                    int t;
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
        for(int i=0;i<k;i++)
            sum+=a[i];
        sum=sum-a[n-1];//通过上述循环后进行加和
        printf("%d\n",sum);//输出最大的管理方便度之和
    }
}


2:话说有这么一天, 曹大神正走在去上课的路上,突然他发现,似乎马上就要迟到了,急的他马上跳了起来(急的不能正常走路了  O(∩_∩)O哈哈~~)。现在假设曹大神的位置在(0,0),教室的位置在(x,0)。
 曹大神第i次跳只能跳 的距离,帮曹大神算一下他最快能跳多少次就到教室,算对了曹大神可是会有感谢的哟~(每次跳跃可以向左也可以向右)

输入

输入一个整数 T,表示有 T 组测试数据。
对于每组测试数据,输入一个整数 x(-10e9 <= x <= 10e9)表示教室的x坐标。

输出

对于每组测试数据,输出一个整数,曹大神最快跳几次可以到教室。

题解:

#include<stdio.h>
int main()
{
    int T;//定义一个T,表示有T组测试数据
    scanf("%d",&T);
    long long int x;
    while(scanf("%lld",&x)!=EOF)//多组输入,不过也可以是while(T--),然后再输入数据
    {
        int i=0,sum=0,t;//下述循环,分情况计算次数
        if(x==0)
        t=0;
        else
        {
            if(x<0)
            x=-x;
        for(i=1;;i++)//i没有给定范围
        {
            sum+=i;
            if((sum-x)%2==0&&sum-x>=0)
                break;
        }
        t=i;//将t和i的数值调换
        }
        printf("%lld\n",t);//最后输出需要多少步
    }
    return 0;
}


3:一位智将才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。

输入

输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5

输出

输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89

题解:

#include<stdio.h>
int main()
{
    int a,b,c,i,k=0;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)//多组输入
    {
        for(i=10;i<=100; i++)//用if语句直接判断人数符合哪种情况
        {
            if(i%3==a&&i%5==b&&i%7==c)
            {
                k++;
                printf("%d\n",i);
                break;
            }
        }
        if(i>100)
        {
            k++;
            printf("%d",k);//输出总人数的最小值
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值