商品顺序问题,如何用C++实现

商品总共有 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

如下:

img

#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);
    }
}