从左至右,从上至下建立坐标,发现了什么?
数字1:横+纵=2;
数字2至3:横+纵=3;
数字4至6:横+纵=4;
懂了?
一号问:
1.先分组:如:样例19:1+2+3+4+5=15, 1+2+3+4+5+6=21, 所以19在第六组 所以横+纵=7
2.找出本组最小数,(如第六组为16)此数位于(1,横+纵-1)(如16位于(1,6))
3.算目标数-最小数=x(19-16=3),由于方正排列规则为向左下,所以目标数位于(1+x,横+纵-1-x)(如19位于(1+3,6-3))
int n;
cin>>n;
int sum=0,d=0,sum2=1;
while(sum<n){
d++;
sum+=d;
sum2++;
}
sum-=d;
sum++;
sum2--;
int a1=1,a2=sum2;
while(sum!=n){
sum++;
a1++;
a2--;
}
cout<<a1<<' '<<a2;
二号问倒推即可 1.得出目标所在组 2.所在组最小值+(横坐标-1)为目标
int x,y;
cin>>x>>y;
int sum2=x+y-1;
int sum=sum2*(sum2-1)/2;
sum+=x;
cout<<sum;