杭电 2015 偶数求和 花了一个半小时,真是个菜鸟

原题链接
这道题不难如果暴力很简单(虽然我不会)
但是我的方法用了等差数列前n求和的公式
所以时间复杂度只有O(n)

#include<iostream>

using namespace std;

int main()
{
    
    
	int n, m;
	int sum[100];
	int N[101];
	for (int i = 0; i < 100; i++)
		N[i] = 2 + 2 * i;
	int k;
	while (cin >> n >> m)
	{
    
    
		
		k = n / m;
		for (int j = 0;j<k; j++)
		{
    
    
			sum[j] =  N[j * m] -1+ m;
		}
		if (n - k * m != 0)
		{
    
    
			sum[k] = N[n - 1] - n + k * m + 1;
			for (int l = 0; l < k + 1; l++)
			{
    
    
				if (l == 0)
					cout << sum[l];
				else
					cout<< " " << sum[l];
			}
		}
		else
		{
    
    
			for (int l = 0; l < k; l++)
			{
    
    
				if (l == 0)
					cout << sum[l];
				else
					cout << " " << sum[l];
			}
		}
		cout << endl;

	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/105165258