原题链接:蓝桥杯算法训练VIP-连续正整数的和
解题思路: 暴力法
注意事项: 别超时
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
前缀和+二分 #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; }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))#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; }