目录
第一题-最难问题
思路:
将每个大写字母倒退五个即可,正常如果大于等于F正常倒退,否则要向前前进21个构成循环
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string str;
while(getline(cin,str))
{
for(int i = 0; i < str.size(); ++i)
{
//判断是否是大写字母
if(str[i]>='A' && str[i]<='Z')
{
//循环倒退即可
str[i] = str[i] >= 'F' ? (str[i]-5) : (str[i]+21);
}
}
cout<<str<<endl;;
}
return 0;
}
第二题-因子个数
思路:
本题题目有误,因该是求质因子的数量,而不是因子数量
比如一个数字8,可以是2*4,但是4还可以化简为2*2,所以8的质因子数量因该是1个,所以对于程序,我们首先确定输入n的范围是[2, sqrt(n)],之后将范围内的每一个数对n进行取余,如果能整除则用该数进行循环取余,直到无法取余为止,此时质因子数量加1,直到n的值为1
如果所有循环走完后n的值不为1,此时说明,n在区间[2, sqrt(n)]中没有任何质因子,此时说明n本身就是一个因子,比如7
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int main ()
{
int n = 0;
while(cin>>n)
{
int count = 0;
//取因子范围是[2, sqrt(n)]
for(int i = 2; i <= sqrt(n); i++)
{
if(n%i == 0)
{
//循环取余直到余数不为0,质因子个数加1,否则使用下一个因子计算
while(n%i == 0)
{
n = n/i;
}
++count;
}
}
//最后整除各个因子之后剩余数字不为1,则本身也是个因子比如7
if(n!=1)
{
++count;
}
cout<<count<<endl;
}
return 0;
}