L1-011. A-B-PAT团体程序设计天梯赛(GPLT)

本题要求你计算A-B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A-B的结果字符串。
输入样例:
I love GPLT! It’s a fun game!
aeiou
输出样例:
I lv GPLT! It’s fn gm!
分析:辣么多ASCII码也在0~255之间,所以用book数组标记所有的ASCII码~如果第二个字符出现了这个ACSII码那就标记为1~然后输出的时候当book数组对应的那个ASCII为1的时候就跳过不输出~

L1-010. 比较大小-PAT团体程序设计天梯赛

输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
分析:冒泡呀冒个泡~

L1-006. 连续因子-PAT团体程序设计天梯赛

一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(1<N<231)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:
630
输出样例:
3
5*6*7

[Update v2.0] 由github用户littlesevenmo提供的更高效的解法:
不用算连续因子最多不会超过12个,也不需要三重循环,两重循环即可,直接去计算当前部分乘积能不能整除N
分析:1、如果只有一个因子,那么这个数只能为1或者质数。因此我们主要去计算两个及以上因数的情况。
2、在有两个及以上的数连乘中,因数的最大上限为sqrt(N) + 1
3、因此思路就是,不断构造连乘,看连乘的积是否是N的因数,如果是,则看这部分连乘的数的个数是否比已记录的多。
4、用变量first记录连乘的第一个数字,这里我把它赋初值为0,如果在寻找N的因数过程中,first没有改变,那么就表明N是1或者是一个质数~

 

蓝桥杯 ADV-205 算法提高 拿糖果(动态规划)

问题描述
妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
  假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
  现在小B希望知道最多可以拿多少糖。
输入格式
  一个整数N
输出格式
  最多可以拿多少糖
样例输入
15
样例输出
6
数据规模和约定
N <= 100000

分析:动态规划问题~~首先呢~创建一个满足不大于根号下最大值MAXN的素数表,然后对素数表里面的数逐个遍历~
构建一个dp[i]数组,表示当糖果数量为i的时候所能拿的最多的糖果数量~
对于dp[i]的值:因为小B只能每次拿不大于根号下i的质因数,遍历素数表中满足条件的素数(prime[j] <= sqrt(i) && i % prime[j] == 0),更新dp[i]的值为(dp[i-2*prime[j]] + prime[j])的最大值~
即:dp[i] = max(dp[i], dp[i-2*prime[j]] + prime[j]);

 

蓝桥杯 ADV-143 算法提高 扶老奶奶过街

一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
例如
A B C D E(这显然不是正确答案)

分析:建立一个含有5个元素的数组,分别代表abcde五个人。逐个假设abcde是扶老奶奶过街的人,判断他们说话为真的个数是否为2,为2的时候输出

 

蓝桥杯 ADV-108 算法提高 分数统计

问题描述
  2016.4.5已更新此题,此前的程序需要重新提交。
问题描述
  给定一个百分制成绩T,将其划分为如下五个等级之一:
  90~100为A,80~89为B,70~79为C,60~69为D,0~59为E
  现在给定一个文件inp,文件中包含若干百分制成绩(成绩个数不超过100),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。要求输出到指定文件oup中。
输入格式
  若干0~100的正整数,用空格隔开
输出格式
  第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数
  第二行一个正整数,表示人数最多的等级段中人数
  接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
样例输入
100 80 85 77 55 61 82 90 71 60
样例输出
2 3 2 2 1
3
85 82 80
分析:它赖皮。。测试数据里面有分数的个数的值。。而测试样例里面没写。。。