题目描述:
分析思路
做这种题目无非就是找到其中蕴含的【规律】
首先,根据描述,我们知道:
1.当排数为偶数时,数字排列是从右上到左下的
2.当排数为奇数时,数字排列是从左下到右上的
具体规律是什么,我们先把框架基础的写好,往下看,其他规律慢慢分析
代码书写
框架+输入
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d",&n);输入
int t = 1;//记录这是第几排
int num = 1;//记录这个数是第几个数字
return 0;
}
循环遍历 判断是奇数还是偶数排
因为我们不知道循环次数,所以应该用wile循环,并且按照对应的排数对应的顺序进行for循环遍历
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d",&n);
int t = 1;
int num = 1;
while (1){
int n1,n2;//代表“/”左右两边的数
if (t%2!=0){
for (int i = t;i>=1;i--){//奇数排从左下到右上
}
t++;//增加排数
}
else{
for (int i = 1;i<=t;i++){//偶数排从右上到左下
}
t++;//增加排数
}
}
return 0;
}
观察发现规律
写好遍历循环后,寻找 i(这一排第一个数) t(排数)之间的数量关系,发现【规律】
n1 = i; n2 = t-i+1;
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d",&n);
int t = 1;
int num = 1;
while (1){
int n1,n2;
if (t%2!=0){
for (int i = t;i>=1;i--){
n1 = i;
n2 = t-i+1;//根据规律计算
}
t++;
}
else{
for (int i = 1;i<=t;i++){
n1 = i;
n2 = t-i+1;
}
t++;
}
}
return 0;
}
如何现在我们计算的数就是要求的数(判断),就要输出,然后结束程序
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d",&n);
int t = 1;
int num = 1;
while (1){
int n1,n2;
if (t%2!=0){
for (int i = t;i>=1;i--){
n1 = i;
n2 = t-i+1;
if (num == n){//判断是不是要求的数
printf("%d/%d",n1,n2);
return 0;
}
num++;//更新计数器
}
t++;
}
else{
for (int i = 1;i<=t;i++){//同理
n1 = i;
n2 = t-i+1;
if (num == n){
printf("%d/%d",n1,n2);
return 0;
}
num++;
}
t++;
}
}
return 0;
}
终极代码
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d",&n);
int t = 1;
int num = 1;
while (1){
int n1,n2;
if (t%2!=0){
for (int i = t;i>=1;i--){
n1 = i;
n2 = t-i+1;
if (num == n){
printf("%d/%d",n1,n2);
return 0;
}
num++;
}
t++;
}
else{
for (int i = 1;i<=t;i++){
n1 = i;
n2 = t-i+1;
if (num == n){
printf("%d/%d",n1,n2);
return 0;
}
num++;
}
t++;
}
}
return 0;
}