B
错误做法:运行超时,并且for循环中的i应该是long long 定义,做题时疏忽。
正确做法:
用for循环的i*i<=x来缩短运行时间,用while函数将x中的已计入因数全除完,思路清晰,当时没有想到这种做法。
#include<iostream>
using namespace std;
int main()
{
long long x,i;
scanf("%lld",&x);
int sum=0;
for(i=2;i*i<=x;i++) //转换成i*i,缩短了代码运行时间,提高效率
{
if(x%i==0)
{
sum++;
while(x%i==0)
{
x=x/i; //除到没有i这个因数为止
}
}
}
if(x>1) sum++;
printf("%d",sum);
return 0;
}
C
思路:若以a为中间值,那么字符串数应是a两边最小的数。
故代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
string s;
char a;
long long sum=0;
cin>>n>>a;
cin>>s;
for(int i=0;i<n;i++)
{
if(s[i]== a)
{
sum++;
sum+=min(i,n-i-1);
}
}
cout<<sum;
return 0;
}