连续因子
L1-006 连续因子 (20 分)
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。
给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2^31)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,
其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
567
/*
先判断是不是素数
如果是素数,输出1(换行)n
如果不是素数,写双重循环,找最长连续因子的序列
*/
#include<bits/stdc++.h>
int is_prime(int n)
{
if (n == 1 || (n % 2 == 0 && n != 2))
{
//1不是素数,2是素数,除了2以外的偶数不是素数
return 0;
//4 6 8 解决
}
int is_true = 0;
for (int i = 3; i <= sqrt(n); i=i+2) //sqrt(9)==3 ,9之前要提前解决, 9以及9之后才进入循环
{
//不进循环的2 3 5 7 全为质数,没进循环,is_true==0,满足条件
if (n % i == 0)
{
is_true = 1;//不是素数
break;
}
}
if (is_true)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int N;
std::cin >> N;
if (is_prime(N)) //是素数,只有1*N两个因子
{
std::cout << 1 << std::endl << N;
}
else //不是素数,n个因子
{
int a = 0, b = 0;//a预备存放连续因子长度,b存放第一个连续因子;
for (int i = 2; i < sqrt(N) + 1; i++)
{
if (N % i == 0)
{
int sum = i; int j=0;
for ( j = i + 1; j < sqrt(N) + 1; j++)
{
sum = sum * j;//sum保存连续因子的乘积
if (N % sum != 0) //不再连续则跳出
{
break;
}
}
if (a < j - i) //跳出后j-1为最后一位连续因子的位置,i为第一位连续因子的位置,j-i为连续因子长度
{//如果前一个连续段落的长度小于这个,则执行
a = j - i;
b = i;
}
}
}
std::cout <<a<<std::endl;
for (int i = b; i <= a + b - 1; i++) //a+b-1即j-1,即最后一位连续因子的位置
{
if (i == b)
{
std::cout << i;
}
else
{
std::cout << '*' << i;
}
}
}
}
最佳情侣身高
情侣身高问题
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。
如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,
其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96
#include<bits/stdc++.h>
struct people
{
char male_female;
double height;
};
void c_height(char c,double height1)
{
if (c == 'M')
{
printf("%.2f", height1 / 1.09);
}
else if (c == 'F')
{
printf("%.2f", height1 * 1.09);
}
}
int main()
{
int N;
std::cin >> N;
struct people* couple = new struct people[N];
for (int i = 0; i < N; i++)
{
std::cin >> couple[i].male_female;
std::cin >> couple[i].height;
}
for (int i = 0; i < N; i++)
{
c_height(couple[i].male_female, couple[i].height);
if (i != N - 1)
{
std::cout << std::endl;
}
}
}