『ACM C++』 PTA 天梯赛练习集L1 | 027-028
死亡周二,今天去看惊奇队长了!!!真的很佩服国外的后期特效大片技术,要是我们国内也能实现这样的技术能力就好了~ 羡慕max
------------------------------------------------L1-027----------------------------------------------------------
出租
下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。
输入样例:
输出样例:
int[] arr = new int[]{,,,,};
int[] index = new int[]{,,,,,,,,,,};
------------------------------------------------L1-027----------------------------------------------------------
注:思路还是很清晰的,没有遇到什么坑点,直接贴AC代码
#include<stdio.h>
#include<algorithm>
using namespace std;
char number[];
int Match[];
int length,ans,c;
int main()
{
c = ;
for(int i = ;i<;i++)
{
scanf("%c",&number[i]);
int temp;
temp = number[i] - '';
if(Match[temp] == )
{
Match[temp]++;
length++;
}
}
printf("int[] arr = new int[]{");
ans = length;
for(int i = ;i>=;i--)
{
if(Match[i] == ) continue;
Match[i] = c;
c++;
printf("%d",i);
if(length != ) printf(",");
length--;
}
printf("};\n");
printf("int[] index = new int[]{");
for(int i = ;i<;i++)
{
if(i == ) printf("%d",Match[number[i]-'']);
else printf(",%d",Match[number[i]-'']);
}
printf("};");
return ;
}
------------------------------------------------L1-028----------------------------------------------------------
判断素数
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
输入样例:
输出样例:
Yes
No
------------------------------------------------L1-028----------------------------------------------------------
注:通过这道理学到了几种判断素数的方法:
第一种:超低配版 · 从1到n每一个单独判定:
bool Sushu( int num )
{
int tmp =num- ;
for(int i= ;i <=tmp; i++)
if(num %i== )
return ;
return ;
}
第二种:低配版 · 从1到sqrt(n)每一个单独判断:注意坑点:1不是素数,要单独判断!!不然过不了测试点.
#include<stdio.h>
#include<math.h> long long int times;
bool Sushu(long long int num)
{
long long int sqrtO,test = ;
sqrtO = sqrt(num);
for(long long int i = ;i<=sqrtO;i++)
{
if(num%i==) break;
else test++;
}
if(test == (sqrtO -)) return ;
else return ;
}
bool YES[];
int counter;
long long int temp;
int main()
{
scanf("%d",×);
while(times--)
{
scanf("%lld",&temp);
if(temp == )
{
YES[counter] = ;
counter++;
continue;
}
if(Sushu(temp) == || temp == )
{
YES[counter] = ;
counter++;
}
else
{
YES[counter] = ;
counter++;
}
}
for(int i = ;i<counter;i++)
{
if(YES[i] == ) printf("Yes\n");
else printf("No\n");
}
return ;
}
第三种:中配版,判断2之后只需要判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数。时间复杂度O(sqrt(n)/2)
bool Sushu( int num )
{
if(num % == ) return ;
int tmp =num- ;
for(int i= ;i <=sqrt(tmp); i=i+)
if(num %i== )
return ;
return ;
}
第四种:牛逼版,素数要出现只可能出现在6x的相邻两侧。因此在5到sqrt(n)中每6个数只判断2个,时间复杂度O(sqrt(n)/3)。
int Sushu(long long num)
{
if(num<=) return ;
if(num==||num==) return ;//两个较小数另外处理
if(num%!=&&num%!=) return ;//不在6的倍数两侧的一定不是质数
//在6的倍数两侧的也可能不是质数
for(long long i=;i*i<=num;i+=)
if(num%i==||num%(i+)==) return ;
return ;//排除所有,剩余的是质数
}
证明:
令x≥1,将大于等于5的自然数表示如下:
······ 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ······
可以看到,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们一定不是素数,再除去6x本身,显然,素数要出现只可能出现在6x的相邻两侧。
参考:https://blog.csdn.net/huang_miao_xin/article/details/51331710
注:如果有更好的解法,真心希望您能够评论留言贴上您的代码呢~互相帮助互相鼓励才能成长鸭~~
『ACM C++』 PTA 天梯赛练习集L1 | 027-028的更多相关文章
- 『ACM C++』 PTA 天梯赛练习集L1 | 001-006
应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ - ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 048-49
今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 040-41
近期安排 校赛3.23天梯赛3.30华工校赛 4.21省赛 5.12 ------------------------------------------------L1-040----------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 021-024
忙疯警告,这两天可能进度很慢,下午打了一下午训练赛,训练赛的题我就不拿过来的,pta就做了一点点,明天又是满课的一天,所以进度很慢啦~ -------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 007-011
真的是忙头晕了,学业.ACM打题.班级活动.自学新东西,哇这充实的大学~ ------------------------------------------------L1-007--------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 044-45
记录今日刷题 ------------------------------------------------L1-044--------------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 042-43
记录刷题情况 ------------------------------------------------L1-042--------------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 036-037
这几天比较忙,所以随便做做水题了,得赶紧把英剧搞完啊啊啊啊啊啊 ------------------------------------------------L1-036-------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 029-033
哈哈,今天开始我也是学车人了~ 开始一千多道疯狂刷题~ ------------------------------------------------L1-029------------------ ...
随机推荐
- 【PHP系列】PHP 7.0新增特性详解
开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大家详细讲解下 http://php.net/manual/en/migration70.new-features.php 1. ?? ...
- 关于asp.net MVC3 ----@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:@Html.Partial 对应 @{Html.RenderPartia ...
- [翻译] GSProgressView
GSProgressView 本人极不推荐使用drawRect的方式来绘制下载进度条,无论机器的性能怎么高,使用drawRect用于绘制图形都是低效的. A cute little circular ...
- [翻译] AsyncDisplayKit
AsyncDisplayKit AsyncDisplayKit is an iOS framework that keeps even the most complex user interfaces ...
- django1.8 增加注册用户其他字段(用户扩展)
在V1.6及之后版本已经删除get_profile()方法,需要使用userprofile. 1.新建moduel,名为UserProfile: class UserProfile(models.Mo ...
- maven将依赖的包一起打包
把以下内容输入到pom中即可 <build> <plugins> <!-- 将项目的依赖包复制到 target/lib --> <plugin> < ...
- 乘风破浪:LeetCode真题_012_Integer to Roman
乘风破浪:LeetCode真题_012_Integer to Roman 一.前言 经过了前面的思维训练,我们在某些方面有了一定的提高,但是对于实际的问题,要在短时间内得到答案,还是需要我们多多的练习 ...
- 沉淀再出发:Tomcat的实现原理
沉淀再出发:Tomcat的实现原理 一.前言 在我们接触java之后,相信大家都编写过服务器程序,这个时候就需要用到Tomcat了.Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统 ...
- UpdatePanel中用后台CS代码调用JS代码,先执行控件事件,后触发JS
引用地址: http://www.cnblogs.com/silenkee/articles/1609831.html 页面中加入了UpdatePanel后,Response.Write(&quo ...
- [EffectiveC++]item41:了解隐式接口和编译器多态
classes和templates都支持接口和多态,interfaces and polymorphism 对classes而言接口是显示的explicit,以函数签名为中心.多态则是通过virtua ...