题目描述
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
……
求这个三角形中第N个数是第几行的第几个数
输入
Input
输入一个整数N(1<=N<=32767),表示第N个数。
输出
Output
输出两个整数i,j,中间用一个空格隔开,表示第N个数在第i行的第j个位置。
样例输入
5
样例输出
3 2
[小数据量时]
自己独立完成的做法
#include <iostream>
using namespace std;
int main()
{
int n,i,j,t=1;
cin>>n;
for(i=1;i<=1000;i++)
{
for(j=1;j<=i;j++)
{
if(t==n)
cout<<i<<" "<<j;
t++;
}
}
return 0;
}
[大数据量时]
大数据量时,不懂得如何优化算法
在两个师兄帮助下做出来的两种代码
1,
#include <iostream>
using namespace std;
int main()
{
int n,i=0,sum=0;
cin>>n;
while(1)
{
if(sum>=n) break;
sum+=++i;
}
cout<<i<<" "<<n-sum+i;
return 0;
}
2,
#include <iostream>
using namespace std;
int main()
{
int N,i=0,sum=0,min=0,n=0,a,b;
cin>>N;
if(N==1) cout<<"1"<<" "<<"1"<<endl;
else
{
min=2;
n=2;
while(!(N>=min && N<=n*n-min+1))
{
n=n+1;
min=min+n-1;
}
a=n;
b=1;
for(i=min;i<=n*n-min+1;i++,b++)
if(i==N)
cout<<a<<" "<<b;
}
return 0;
}
算法方面比较薄弱!!!