题目描述
牛村村口要架设一个矩形的广告屏,村长要求广告屏的总像素必须为n,还要求广告屏的长和宽最大可能的接近,而且宽不能大于长,村长找你来计算一下宽和长分别为多少?输入描述:
输入一行,包含一个正整数n表示像素点个数。(1 <= n <= 1000000)输出描述:
宽和长,两个整数之间用空格隔开。示例1
输入:8
输出:2 4解题思路:
根据题目要求,设宽为 x ,长为 x + k ,则有 x(x+k) = n, ,若要长和宽尽可能接近,且宽不大于长,相当于令 k 趋于 0, 令 k 对 x 求导有: ,由于 f(x) 恒为负,因此 x 越大,k 越小,且 k 不能为负数,因此 n ≥ x*x。可以从 x = 1,开始遍历,找到能够整除 n 的最大的 ,则相应的长为: 。C# 代码
using System; class Program{ static void Main(){ string input; while((input = Console.ReadLine()) != null){ int n = int.Parse(input); int x = 1; for(int i = 1; i*i <= n; i++) if(n%i == 0) x = i; Console.WriteLine(x + " " + n/x); } } }