六年级-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)
再加上原来一组