商品总共有 t 个,按顺序由 1 到 t 编号,每页显示 a 个,请问第 p 页显示的最小和最大编号是多少?
输入格式
输入一行包含三个整数 t、a、p,相邻整数之间用一个空格分隔。
输出格式
输出一行包含两个整数,分别表示最小和最大编号。
样例输入
31 10 3
样例输出
21 30
样例输入
31 10 4
样例输出
31 31
评测用例规模与约定
对于所有评测用例,1 <= t <= 1000,1 <= a <= 100,1 <= p。保证第 p 页至少显示一个商品
这就是分页算法呀。
把总数量除以每页数量就行。
#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
using namespace std;
int main() {
int total;
int pageSize;
int nowPage;
scanf("%d%d%d", &total, &pageSize, &nowPage);
if (total > (nowPage - 1) * pageSize + pageSize) {
printf("%d %d", (nowPage-1) * pageSize+1, (nowPage - 1) * pageSize + pageSize);
}
else {
printf("%d %d", (nowPage - 1) * pageSize+1, total);
}
}
分别计算t/a和t%a,起点为(p-1)*a+1;,终点要看t/a是否大于等于p,大于则终点为起点加a-1;否则为起点+t%a-1
如下:
#include <stdio.h>
int main()
{
int t,a,p;
int mmin,max;
scanf("%d %d %d",&t,&a,&p);
if(p == 1)
{
printf("1 %d\n",t>a?a:t);
return 0;
}else if(p > 1)
{
mmin = a*(p-1)+1;
if(mmin > t)
{
printf("超出总数");
return 0;
}
if(mmin+a < t)
max = mmin + a;
else
max = t;
printf("%d %d\n",mmin,max);
return 0;
}
}
这个实现起来应该比较容易,只需要注意一下,边界点即可,比如t=1这种情况
#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
using namespace std;
int main() {
int total;
int pageSize;
int nowPage;
scanf("%d%d%d", &total, &pageSize, &nowPage);
if (total > (nowPage - 1) * pageSize + pageSize) {
printf("%d %d", (nowPage-1) * pageSize+1, (nowPage - 1) * pageSize + pageSize);
}
else {
printf("%d %d", (nowPage - 1) * pageSize+1, total);
}
}