文章目录
-
一.数对
-
二.截取字符串
一.数对
牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。
输入描述:
输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
输出描述:
对于每个测试用例, 输出一个正整数表示可能的数对数量。
int main()
{
long n,k = 0;
long count =0;
while(~scanf("%ld %ld",&n,&k))
{
if(k==0)
{
printf("%ld\n",n*n);
continue;
}
for(long y = k+1;j<=n;j++)
{
long help = n%y<k?0:(n%y)-k+1;
count+=(y-k)*(n/y)+help;
}
printf("%ld\n",count);
}
return 0;
}
方法详解:
当 y <=k 时,意味着任何数字取模y的结果都在 [0, k-1]之间,都是不符合条件的。
当 y = k+1=4 时, x 符合条件的数字有 3,7当 y = k+2=5 时, x 符合条件的数字有 3,4,8,9当 y = k+3=6 时, x 符合条件的数字有 3,4,5,9,10当 y = k+n 时,x 小于 y 当前值,且符合条件的数字数量是: y-k 个,x 大于 y 当前值,小于 2*y 的数据中,且符合条件的数字数量是: y-k 个从上一步能看出来,在 y 的整数倍区间内, x 符合条件的数量就是 (n / y) * (y - k) 个n / y 表示有多少个完整的 0 ~ y 区间, y - k 表示有每个区间内有多少个符合条件的数字最后还要考虑的是 6... 往后这种超出倍数区间超过 n 的部分的统计n % y 就是多出完整区间部分的数字个数,其中 k 以下的不用考虑,则符合条件的是 n % y - (k-1) 个这里需要注意的是类似于 9 这种超出完整区间的数字个数 本就小于 k 的情况,则为 0最终公式:(n / y) * (y - k) + ((n % y < k) ? 0, (n % y - k + 1));
二.截取字符串
描述
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出
数据范围:字符串长度满足 1 \le n \le 1000 \1≤n≤1000 , 1 \le k \le n \1≤k≤n
输入描述:
1.输入待截取的字符串
2.输入一个正整数k,代表截取的长度
输出描述:
截取后的字符串
#include <stdio.h>
int main()
{
char str[101];
while(scanf("%s", str) > 0) {
int n;
scanf("%d", &n);
str[n] = '\0';
printf("%s\n", str);}
}
不需要循环,直接十行结束!