pta——连续因子求解__最佳身高求解

pta——连续因子求解__最佳身高求解

连续因子

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;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值