C语言之素数与串问题

1.调酒师

作为调酒师的西瓜,在生日当天,请了N位好朋友来家中作客,当然免不了大展身手。西瓜在超市买了A瓶酒,每瓶酒有B毫升,买了C个柠檬,把每一个柠檬切成D片,还买了E克盐。西瓜要调的酒,每一杯需要F毫升的原味酒、一片柠檬以及G克盐。西瓜希望每个朋友分到同样杯数的酒,同时西瓜又希望每个人分到的酒尽可能多。问每个朋友能分到几杯调好的酒。

输入声明:一个整数t,表示测试数据组数(1<=t<=100)
对于每一组数据,共一行,有8个整数,逗号隔开,分别为N,A,B,C,D,E,F,G,其中这7个整数都在[0, 1000]内,保证N不为0。

输出说明:每一组测试数据,输出一个整数,表示每个朋友分到的酒的杯数。

输入样例:

输出样例:

程序:

注意:各个数之间的关系,如果在计算的时候需要上取整或者下取整,可以使用ceil()或floor()函数,返回值均为double。

2.求素数 :用筛选法求(1,n]之内的全部素数

输入说明:行1:一个整数n,n∈[2,100000]

输出说明:每行输出一个素数,由小到大排列

输入样例:

输出样例:

程序:

 

注意:对2,3的特判!!!

3.素数判断:输入1000以内的数,判断是否为为素数,是则输出“Yes”,否则输出“No”. 注意:1不是素数

输入说明:第一行输入t(t<=10),接下来t行为输入的数。

输出说明:每个数输出对应结果

输入样例:

输出样例:

程序:

 

注意:特判1,2,3并且注意素数判断关系!!!

2,3总结:采用素数筛法,常见的有埃式筛法、线性筛法(欧拉筛法)

埃式筛法:依次处理2,3…的倍数,直到处理到ceil(sqrt(N)),其缺点在于会多次处理某些数的公倍数,如20
4.判断回文 :一个字符串从左向右读和从右向左读是一样的,我们称这样的字符串为回文串。 例如:aba,abccba都是回文串。 问题:现在给你一个字符串,判断它是否是回文串。

输入说明:多组数据,以EOF结束。输入字符串str长度不超过100

输出说明:判断该字符串是否为回文串,是则输出”YES”,否则输出”NO”.

输入样例:

输出样例:

程序:

 

注意:对p的声明要放到while里面去!!!还有,输出是YES不是Yes!!!
5.分解质因数:给出一个正整数m, 将其分解成质数相乘的形式,即 m=m1*m2*m3*….*mk. 其中mi为质数,并且满足m1<=m2<=m3<=….<=mk。若m本身就是质数,则直接输出m=m即可。

输入说明:输入包括多组测试数据,每组测试数据占一行,并且只有一个正整数m,当m=0时,表示输入结束。

输出说明:对每组测试数据输出一个结果,并占一行。

输入样例:

输出样例:

程序:

 

注意:输出格式一点要对!!!

补充题:若一个数的所有因子之和恰好等于其本身,称此数为完数。请输出1000以内的所有完数,输出样例:6 its factors are 1 2 3

程序:

 

此题要注意后续的输出如何输出。

6.大数加法:求两个不超过200 位的非负整数的和。

输入说明:有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。
输出说明:一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是342,那么就不能输出为 0342

输入样例:

输出样例:

程序:

 

注意:对t的声明必须要放在while里面,这个和第4题是一样的

补充:杭电1002大数加法题

input:The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

output:For each test case, you should output two lines. The first line is “Case #:”, # means the number of the test case. The second line is the an equation “A + B = Sum”, Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.

sample input:

2

1 2

112233445566778899 998877665544332211

sample output:

Case 1:

1 + 2 = 3

 

Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

程序:

1.对上面的程序稍作更改:把while语句改成for循环,并加上:

 

记得输出结果中空行,在最后一行中,只需输出一个空行即可,用下列语句控制:

 

2.

 

这是用字符串模拟的方式,来计算大数加法,也可以用数组来进行计算。还有若遇到0000000000000的情况,应进行特判。

PS:EOL代表此处输出换行符’\n’,EOF代表数据输出结束

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注