C++题目:小 X 与小和尚(sum)

题目描述

研究了这么多学术性的问题,小 X 想听个故事来放松一下自己的大脑。而小 X 最喜欢听的是这样一个故事: 从前有座山 , 山 里有座庙, 庙里有个老和尚和小和尚,老和尚给小和尚讲故事: 从前有座山 , 山里有座庙, 庙里有个老和尚和小和尚,老和尚给小和尚讲故事: 从前有座山……不过讲着讲着,老和尚也有点累 了,所以这一次老和尚不给小和尚讲故事了,老和尚要求小和尚去敲木鱼。 这个敲木鱼是有讲究的,在开始敲之前老和尚会告诉小和尚一个数 n。而小和尚在敲的时候, 第一次敲 1 下, 第二次敲 2 下… 第 n 次敲 n 下, 第 n+1 次敲 n 下, 第 n+2 次敲 n-1 下… 第 2× n 次敲 1 下,第 2× n+1 次敲 1 下, 第 2× n+2 次敲 2 下……如果用一个简单的数列 来表示小和尚 每次敲了多少 下,那应该是: 1, 2, 3,……, n-1, n, n, n-1, n-2,……, 3, 2, 1, 1, 2, 3,……简单说来就是 1~n, n~1, 1~n 一直这么循环地敲下去。小和尚数着数着就不记得自己敲了多少下了,而他只记得自己刚刚敲完第 m 次。 马上老和尚就要来检查小和尚是不是在认真的敲了,小和尚没办法, 只 能求助于你, 希望你能告诉他, 敲完第 m 次的时候,他一共敲了多少下?

输入

输入数据共有一行包含两个用空格隔开的整数表示 n 和 m。

输出

输出数据仅有一行包含一个正整数ans, 表示最后小和尚一共敲了 ans下。注意运算时数据可能比较大, Pascal 选手请使用 int64, C++ 选手请使用 long long

样例输入

3 8

样例输出

15

提示

【数据范围】对于 40% 的数据, 1 ≤ m ≤ 100000对于另外 30% 的数据, n = 2对于 100% 的数据, 1 ≤ n ≤ 10, 1 ≤ m ≤ 1000000000【样例解释】 小和尚共敲了 8 次木鱼, 第一次敲了 1 下, 第二次敲了 2 下, 第三次敲了 3 下, 第四次敲了 3 下, 第五次敲了 2 下, 第六次敲了 1 下, 第七次敲了 1 下, 第八次敲了 2 下,总共敲了 15 下。

#include<bits/stdc++.h>
using namespace std;
int a[100];
int b[100];
int main()
{
	long long m,n,k,n1,m1,s=0,q=0;
	cin>>n>>m;
	s=s+(1+n)*n/2;
	n1=m/n;
	s=s*n1;
	if(m%n!=0) 
	{
			if(n1%2==0)
		{
		for(int i=1;i<=m%n;i++)
		{
			s=s+i;
		}
		}
	else
	{
		for(int i=n;i>n-m%n;i--)
		{
			s=s+i;
		}
	}
	}

	cout<<s;
}

来源/分类

常州市2016“信息与未来”夏令营选拔赛

发表评论