解题思路:


第一次:1+(1+2+3+4+5)=16

第二次:16+(6+7+8+9+10)=56

第三次:56+(11+12+13+14+15)=?

第x次:s[x-1]+((x-1)*n+1+x*n)*n/2=?

(x-1)*n+1为后面等差数列的第一个数

(x*n)为后面等差数列的最后一个数

再运用等差数列求和公式即可得到结果。




注意事项:


n,k,T 一定是longlong;


参考代码:

#include <stdio.h> 
#include<stdlib.h>
#include<math.h>
int main()
{
 int i = 1;//ci shu
 long long sum = 1,x, add = 1, n, k, T;
 scanf("%lld%lld%lld", &n, &k, &T);
 while (i<T)
 {
  x = add + ((i - 1)*n + 1 + i*n)*n / 2;
  i++;
  x = x%k;
  sum += x;
  add = x;
 }
 printf("%lld", sum);
 return 0;
}

点赞(6)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 7 条评论

133 1年前 回复TA
#include<stdio.h>
int main()
{
    int j=0,i,k,n,T,v=0;
    long long s=0;
    scanf("%d %d %d",&n,&k,&T);
    int m[n*T-n+1];
    int d=1,x=1;
    for(i=1;i<n*T-n+1;i++)
    {
          m[0]=1;
        m[i]=m[i-1]+d;
        d++;
    }
    for(i=1;i<n*T-n+1;i++)
    {
         while(m[i]>k-1)
        {
         m[i]=m[i]-(k-1)-1; 
        }
    }
  for(i=0;i<n*T-n+1;i++)
  {
         
      if(i+1==x)
   { s=s+m[i];
    x=x+n;
   }
   
  }
     printf("%lld\n",s);
    return 0;
}//这个显示运行错误是怎么回事啊
lqbsy 2年前 回复TA
请大佬帮我看看,我输的每个数结果都能对上,就是一直运行错误

#include<stdio.h>
int main()
{
	int n, k, T;   //人数,不超过几,说的个数
	int i,j=1,a[1000000];
	scanf("%d %d %d", &n ,&k, &T);
	a[1] = 1;
	for (i = 2; i <= T* n+1; i++)
	{
		a[i] =(a[i-1]+j)%k;
		j++;
	}

	long long int sum = 0;
	//a[1]   a[1+n]   a[1+n+n]
	for (i = 1; i <= (T-1)*n+1; i+=n)
	{
		sum += a[i];
	}
	printf("%lld", sum);
	return 0;
}
好好学习 2年前 回复TA
@好好学习 提交显示答案错误,可是我输出就是17.......
好好学习 2年前 回复TA
#include <stdio.h>
int main()
{
	int n, k, t, sum = 0, a = 0, b = 1, c = 0, d, e = 0;
	scanf("%d %d %d", &n, &k, &t);
	while (b < k - 1)
	{
		b = b + a;
		c = c + 1;
		a = a + 1;
		if ((c - 1) % 3 == 0)
		{
			sum = sum + b;
			e = e + 1;
		}
		if(e==t)
		{
		    printf("%d",sum);
		    break;
		}
		if (b+a>k)
		{
			d = b;
			b = a - (k - 1 - d) - 1;
			c = c + 1;
			a = a + 1;
		}
	}
	return 0;
}
大佬们,帮我看看,这哪里不对啊
2020计科冷文清 3年前 回复TA
@爱学习正紧人 防止数值过大
WE戴戴AK 4年前 回复TA
@爱学习正紧人 同问,int不是能存放10位数字吗
爱学习正紧人 5年前 回复TA
为什么输入n,k,T,都需要定义为long long,为什么不能用int