uav10161

从对角线上入手   比如 con[i+1][i+1]=con[i][i]+2i;

接着每个要找的数字要和对角线元素两两对比夹在大小之间,接着再根据奇偶判断位置  
敲的时候发现很多bug   最后被空格换行弄得一直ac不了  我去啊


#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int con[10500][10500];

int main(){
	
	memset(con, 0, sizeof(con));
	con[0][0] = 1;
	for (int i = 0,j=1; i < 1050; i++,j++){
		con[i + 1][i + 1] = con[i][i] + 2 * j;
	}
	int n;
	while (cin >> n){
		if (n == 0) break;
		for (int i = 0; i < 1050; i++){
			if (con[i][i] < n && con[i + 1][i + 1] >= n){
				if (i % 2 == 0){
					int k = n - con[i][i];
					if (k>i)
						printf("%d %d\n", k-i, i + 2 );
					else
						printf("%d %d\n", i + 1 - k, 1 + i);
				}
				else {
					int k = n - con[i][i];
					if (k > i)
						printf("%d %d\n", i + 2, k - i);
					else
						printf("%d %d\n", i + 1, i + 1 - k);
				}
			}
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值