等差数列
发布时间
阅读量:
阅读量
题目描述
一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…)的数列。
在问题中,a是一个非负整數,b是正整數.設計一個程式來搜索S中的n項等差數列.
输入输出格式
输入格式:
第一行: N(3<= N<=25),要找的等差数列的长度。
第二行: M(1<= M<=250),搜索双平方数的上界0 <= p,q <= M。
输出格式:
如果没有找到数列,输出`NONE’。
如果找到了,输出一行或多行, 每行由二个整数组成:a,b。
这些行应该先按b排序再按a排序。
所求的等差数列将不会多于10,000个。
一个整数m=5;另一个整数n=7
#include<bits/stdc++.h>
using namespace std;
int n,m,c,cc,t,h;
bool q[100001];
struct A
{
int a,b;
}a[100001];
bool cmpp(A a,A b)
{
return a.b<b.b;
}
int main()
{
cin>>n>>m;
for (int i=0;i<=m;i++)
{
for (int j=0;j<=m;j++)
if (q[(i*i)+(j*j)]==0)
{
q[(i*i)+(j*j)]=1;
}
}//求双平方数集合
for (int i=0;i<=m*m*2;i++)
if (q[i])//判断是否在集合里面,作为等差数列的第一个数
for (int j=i+1;j<=m*m*2;j++)
if (q[j])//判断是否在集合里面,作为等差数列的第2个数
{
t=j-i;//公差
if (t*(n-1)+i>m*m*2) break;//一个优化
for (int k=t+i;k<t*(n-1)+i;k+=t)
{
if (q[k+t]==0)
{
t=0; break;
}
}
if (t!=0)
{
a[++cc].a=i; a[cc].b=t;
}
}
if (cc==0)
{
cout<<"NONE";
return 0;
}
sort (a+1,a+1+cc,cmpp);
for (int i=1;i<=cc;i++)
{
printf("%d %d\n",a[i].a,a[i].b);
}
return 0;
}
AI写代码
全部评论 (0)
还没有任何评论哟~
