1-5

1
多组输入(每行),注意格式。几个换行,输出数据之间一个换行,每输出一个数据换行。
在这里插入图片描述
题目链接
题意:给定若干个区间,有重叠多搬一次,不重叠一次搬完,求最少时间。
思路:即重叠次数最多的区间*10。

#include<iostream>
#include<string.h>
using namespace std;
int f[410];//数组开大些
int main()
{
    int T,n,s,t,i;cin>>T;
    while(T--)
    {
        int mmax=0;
        memset(f,0,sizeof(f));//标记函数初始化
        cin>>n;
        while(n--)
        {
            cin>>s>>t;
            if(s>t)swap(s,t);//题目没有明确s,t的关系
            //2-3的实际范围是1-4
            if(s%2==0)s--;
            if(t%2)t++;
            for(i=s;i<=t;i++)
                f[i]++;
        }
        for(i=1;i<=400;i++)
            mmax=max(mmax,f[i]);
        cout<<mmax*10<<endl;
    }
}

在这里插入图片描述
题目链接
题意:p人或q人吃一个蛋糕,蛋糕最少要切几刀。
思路:p+q刀-重复刀数,即p+q-gcd(p,q)。

#include<iostream>
using namespace std;
int gcd(int a,int b)//辗转相处法求a,b的最大公约数
{
    return a%b==0?b:gcd(b,a%b);
}
int main()
{
    int p,q;
    while(cin>>p>>q)
    {
        cout<<p+q-gcd(p,q)<<endl;
    }
}

在这里插入图片描述
题目链接
题意:求一个数的因子之和,因子不包括本身。
思路:直接模拟会超时。转换思路,N的因子是成对出现的,一个小于根号N,另一个大于根号N,求一知一,但因子相同时只能取一个。

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int t,n,i;cin>>t;
    while(t--)
    {
        int sum=1;
        cin>>n;
        int m=sqrt(n)+0.5;
        for(i=2;i<=m;i++)
            if(n%i==0)i==n/i?sum+=i:sum+=i+n/i;//除法可得另一因子
        cout<<sum<<endl;
    }
}

发布了15 篇原创文章 · 获赞 1 · 访问量 441
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览