解题思路:    暴力法

注意事项:   别超时
参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n;
    cin>>n;
    int i,j,num=0;
    //外层控制第一个数
for(i=1;i<=4999;i++){
num=i;     //内层控制第二个数 经过分析,第二个数小于等于5000 
for(j=i+1;j<=5000;j++){
num+=j;
if(num==n) {
cout<<i<<" "<<j<<endl;
}
else continue;
}
} 
return 0;}
点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 4 条评论

咖啡 4年前 回复TA
前缀和+二分
#include <iostream>
using namespace std;
long long s[2000010], m; 

int main() {
	cin >> m;
	for (int i = 1; i < m; ++i) 
		s[i] = s[i - 1] + i;
	for (int i = 1; 2 * i < m; ++i) {
		int l = i + 1, r = m, mid;
		while (l <= r) {
			mid = (l + r) >> 1;
			if (s[mid] - s[i - 1] < m) l = mid + 1;
			else if (s[mid] - s[i - 1] > m) r = mid - 1;
			else {
				cout << i << " " << mid << endl;
				break;
			}
		}
	}
	cout << endl;
	return 0;
}
柞木有诗 4年前 回复TA
非暴力解,py版 具体分析见我的题解
柞木有诗 4年前 回复TA
n=int(input())
re=[]
for i in range(2,n):
    if i%2==0 and n/i==n//i+0.5 and n//i+1-(i//2)>0:  #偶数
        re.append([str(n//i+1-(i//2)),str(n//i+(i//2))])
    elif i%2==1 and n%i==0 and int(n/i)-i//2>0:       #奇数
        re.append([str(n//i-(i//2)),str(n//i+(i//2))])
    elif n//i+1-(i//2)<0 or int(n/i)-i//2<0:          #超界
        break
for i in re[::-1]:
    print(' '.join(i))
999999 4年前 回复TA
#include<stdio.h>
int main()
{
	int i,j,o,k,m,sun=0;
	scanf("%d",&m);
for(i=1;i<10000;i++)
{sun=0;for(j=i;j<10000;j++)
{k=i;sun+=j;o=j;
if(sun<m)continue;if(sun==m&&o!=m)
{printf("%d %d \n",k,o);break;}if(sun>m)
break;}}
return 0;
}