2019-07-05今天是宋宋坐火车的第一天想他想他想他……但是PAT不能不刷!单词不能不背!CSDN不能不更!!人生还是需要奋斗!于是现在都六点了我才只刷了一道PAT呵呵呵话说今晚吃好多好撑呀嗝~~

PAT1006(15分)

太简单了……贴代码

#include <iostream>
#include<string>
#include<cstdlib>
using namespace std;

int main()
{
	char m[10] = { '0','1','2','3','4','5','6','7','8','9'};
	int num; string a;
	int i =1;
	cin >> num;
	//int h,t;
	string ans;
	while (num - 100 >= 0)
	{
		ans += 'B';
		num -= 100;
		//cout << num;
	}
	while (num - 10 >= 0)
	{
		ans += 'S';
		num -= 10;
	}
	while (num>0)
	{
		//a =char(i);
		//cout << a;
		//cout << i;
		ans += m[i];
		i++;
		num--;
	}
	cout << ans;
	//system("PAUSE");
	return 0;
}

 呱,第二道题也刷完啦!!

费了点功夫,从14刷到18再到20!嘻嘻!

但是还是优化不够!

这个比较烦的就是找素数……重点就在怎么节省时间来找全素数。

我想的是排除所有偶数及3的倍数,即当i%2==0时跳过这个数 。后来看别人的发现把for循环步长设为2就行了……哈哈哈哈我蠢了!

然后判断是否为素数时,我也选的步长为2,即当前数从5开始,除以5,除以7,除以9……

然而还是最后一个测试点超时了!!!

最后网上找的答案,他们判断选择被除数的方式是,这个被除数的平方小于当前值即可,步长仍为1。这么算确实很快……具体原理我查了一下,只找到了一个结论(总觉得老师讲过这个结论,我全忘了嘻嘻……)

一个数,如果有因子的话,那么在它的平方根数以内就应该有,否则就没有因子。所以必定有一个因子不大于m的平方根。故判断m是否为素数,只要试除到m的平方根就可以了,不必一直到m-1。

其余的就很简单啦!贴代码!

#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
using namespace std;
vector<int>prime;
int l = 2;

int is_prime(int a)
{
	int j; 
	for (j = 2; j*j<=a; j++)
	{
		if (a%j == 0)
			return 0;
	}
		prime.push_back(a);
		l++;
		if (prime[l] - prime[l-1] == 2)
			return 1;
		else return 0;
}

int main()
{
	int num; cin >> num;
	int count = 0;
	prime.push_back(1);
	prime.push_back(2);
	prime.push_back(3);
	int i;
	if (num <= 4)
		{   cout<<"0";
            return 0;}
    if(num==5)
    {
        cout<<"1";
        return 0;
    }
	for (i = 5; i<=num; i+=2)
	{
		if ( i % 3 == 0)
			continue;
		else
			count+=is_prime(i);
	}
	cout << count;
	//system("PAUSE");
}

今天可以按时打卡啦!开熏!!

希望宋宋火车上睡个好觉,嘻嘻!

 

发布了42 篇原创文章 · 获赞 16 · 访问量 2893

猜你喜欢

转载自blog.csdn.net/weixin_44412218/article/details/94748313
今日推荐