照片摆放
描述
每张图片都是一个正方形,尺寸为 1 个单位乘 1 个单位。
例如,小星现在有 12 张照片
所以这个方的矩形周长,14 个单位,尺寸为 3×4。
请你帮小星求出 n(1<=n<=65000) 张照片,最小的周长是多少,当然还要求出矩形的尺寸。
输入描述
输入多行每一行都表示 照片的个数 n
当 n=0 的时候停止输入
输出描述
输出多行,每一行三个数,分别表示周长、矩形的宽和长,(宽<=长)
样例输入 1
100
15
195
0
样例输出 1
40 10 10
16 3 5
56 13 15
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
while (cin >> n && n != 0) {
int square_root = sqrt(n);
int width, height, perimeter;
if (square_root * square_root == n) {
width = height = square_root;
perimeter = 2 * (width + height);
} else {
width = ceil(sqrt(n));
height = floor(sqrt(n));
perimeter = 2 * (width + height);
}
cout << perimeter << " " << width << " " << height << endl;
}
return 0;
}
照片的个数其实就是矩形的面积,面积一定时,长、宽的差越小,周长越小。
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin >> n;
while(n){
int kuan, chang, zhou;
for(int i = sqrt(n); i >= 1; i--){
if(n % i == 0){
kuan = min(i, n / i);
chang = n / kuan;
break;
}
}
cout << (chang + kuan) * 2 << " " << kuan << " " << chang << endl;
cin >> n;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:方法一:递归
话不多说,直接上代码。只要注意下递归出口就行
public class Solution {
public int Fibonacci(int n) {
if(n==1){
return 1;
}
if(n==0){
return 0;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
方法二:非递归方法
public class Solution {
public int Fibonacci(int n) {
int [] f=new int[40];
f[0]=0;
f[1]=1;
for(int i=2;i<=n;i++){
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
}
方法三:另一种非递归,原理同上
public class Solution {
public int Fibonacci(int n) {
if(n<2){
return n;
}
int a=0;
int b=1;
for(int i=2;i<=n;i++){
b=a+b;
a=b-a;
}
return b;
}
}