判斷一個整數x是否可以表示成n(n>=2)個連續正整數的和

這類問題一般需要先轉化成數學模型,然後根據條件來實現。設最小的數爲m,則x=m+(m+1)+(m+2)+....+(m+n-1),求出m = (2x-n*n+n)/(2n),m爲正整數且m<x。

#include <stdio.h>
#include <stdlib.h>

void fun(int x)
{
	int n = 2;//連續正整數的個數
	float tmp = 0.0;
	int m = 0;//連續正整數中最小的
	
	for (; n < x;n++)
	{
		tmp = (2*x-n*n+n)/(2*n);
		m = (int)tmp;
		if (((2*x-n*n+n)%(2*n) == 0) && m >= 1 && m < x)
		{
			printf("n=%d,m=%d\n",n,m);
		}
	}
}

int main(int argc,char* argv[])
{
	if (argc < 2)
	{
		printf("error\n");
		exit(0);
	}

	int x = atoi(argv[1]);
	fun(x);
	return 0;
}




發佈了20 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章