都比较简单:六年级-2、倍数& 六年级-3、复制

六年级-2、倍数

【题目描述】

给出整数A,B,C,求整数A至整数B范围内有多少个数是C的倍数,并求这些倍数当中的第K个。

【输入格式】

四个正整数,A,B,C,K。

【输出格式】

两个整数。

【输入样例】

9  21  3  2

【输出样例】

5  12

【样例解释】

9至21范围内,是3的倍数有: 9、12、15、18、21共5个,其中第2个是12 。

【数据范围】

对于80%的数据, 1<=A<=B<=10000,  1<=K<=(倍数的总个数)

对于100%的数据,1<=A<=B<=10^18,  1<=K<=(倍数的总个数)

【提示】

对于数据范围较大的,注意要用long long。

代码&解析

别信那鬼题目  这又不是枚举  数学问题而已

#include<bits/stdc++.h>

using namespace std;

long long q,e,a,k,no1;

int main()

{

    cin>>q>>e>>a>>k;

    if(q%a==0)no1=q;

    else no1=a-q%a+q;

    cout<<e/a-(q-1)/a<<" "<<(k-1)*a+no1;

    return 0;

}

第一个在q~e可以被a整除的数 

如果不是q 

就是:

如 8 3

8%3==2

可是就差1了  所以第一个就是3-2+8=9

然后计算q前面(q不算)有多少个a的倍数

e前面(含e)有多少个a的倍数

 六年级-3、复制

题目描述

有一个数组a[1...n],你把数组复制10^100次,然后把他们从左往右串在一起排成一行,就可以得到一个巨长的数组。求最小的下标k, 使得a[1]+a[2]+....a[k] >= X。

【输入格式】

第一行,两个整数:n和X。1<=n<=100000,  1<=X<=10^18。

第二行,n个整数,第i个整数是a[i]。1<=a[i]<=10^9。

【输出格式】

一个整数。

【输入样例】

3  26

3  5  2

【输出样例】

8

【样例解释】

把数组a复制10^100次后,得到{3,5,2,3,5,2,3,5,2,3,5,2,.....},可以发现前8个数的和刚好超过26。

代码&解析

你们叒被题目坑啦    你以为真要复制啊  可笑...       如果数组真能开这么大 10^18  你是不是真打啊

#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100005],ans,s,t,re;
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i],s+=a[i];
    ans=k/s;
    if(k%s==0)
    {
        cout<<ans*n;
        return 0;
    }
    for(int i=1;i<=n;i++)
    {
        t=t+a[i];re++;
        if(ans*s+t>=k)break;
    }
    cout<<ans*n+re;
    return 0;
}

累加第一个数组的所有数字  后续称为一组数组和

我们看看这个大于X 能不能整除一组和

可以就输出

如果不可以我们就

进去看  如果这个数组(从1开始枚举到n)如果大于等于X 就返回第i个(代码用re)

             再加上原来一组

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值