栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

54 等差数列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

54 等差数列

问题描述 :

一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…) 在这个问题中a是一个非负的整数,b是正整数。

写一个程序来找出在双平方数集合S中长度为n的等差数列。双平方数集合是所有能表示成p2+q2的数的集合。

输入说明 :

第一行: N(3<= N<=25),要找的等差数列的长度。 第二行: M(1<= M<=250),搜索双平方数的上界0 <= p,q <= M。

输出说明 :

如果没有找到数列,输出`NONE’。

如果找到了,输出一行或多行, 每行由两个整数组成:a,b 这些行应该先按b排序再按a排序(均为升序)。

将不会有多于10,000个等差数列。

输入范例 :

5 7
输出范例 :

1 4
37 4
2 8
29 8
1 12
5 12
13 12
17 12
5 20
2 24

c++

#include 
using namespace std;

int main()
{   
	int isDnum[100000]={0};//表示双平方数
	int i=0,j=0;
	int n,m;
	int a=0,b=0;
	int flag=0;  //标记是否找到满足条件的数列,默认没有找到
	int scope=0; //数的范围
	cin>>n>>m;
	scope=m*m*2;
	for(i=0;i<=m;i++){ //找出双平方数集合
		for(j=i;j<=m;j++){
		isDnum[i*i+j*j]=1;	
		}	
	}
	for(b=1;(n-1)*b<=scope;b++){//从b开始,保证先按照b排序,再按a排序
		for(a=0;a+((n-1)*b)<=scope;a++){
			for(i=0;i<=n-1;i++){
				if(isDnum[a+i*b]==0){
					break;
				}
			}
			if(i>n-1){
				flag=1;
				printf("%d %dn",a,b);
			}
		}
	}
	if(flag==0){
		printf("NONEn");
	}
	return 0;
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号