目录
笨小猴[P1125]
题目描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设 maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果 maxn-minn 是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。
输入格式
一个单词,其中只可能出现小写字母,并且长度小于 100。
输出格式
共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 "Lucky Word",否则输出 ”No Answer“;
第二行是一个整数,如果输入单词是 “Lucky Word”,输出 maxn-minn 的值,否则输出 0。
样例#1
-
样例输入 #1
error
-
样例输出 #1
Lucky Word
2
样例 #2
-
样例输入 #2
olympic
-
样例输出 #2
No Answer
0
思路:并不困难。只需要统计单词中每个字母的出现次数,确定其中最大值与最小值之后将两者做差,再判断其是否为质数。通过判断是否为质数来确定输出语句即可。
#include<stdio.h>
int main()
{
int a[26] = {0},maxn = 0,minn = 105,kase = 0;
char str[55];
scanf("%s",str);
for(int i = 0;str[i]!=0;i++)
a[str[i]-97]++;
for(int i = 0;i<26;i++){
if(a[i]==0) continue;
if(a[i]>maxn) maxn = a[i];
if(a[i]<minn) minn = a[i];
}
int t = maxn - minn;
for(int i = 2;i*i<=t/2;i++)
if(t % i ==0||t == 0||t == 1){
kase++;
break;
}
(kase==0&&t!=1&&t!=0)?printf("Lucky Word\n%d",t):printf("No Answer\n0");
return 0;
}
a[0]至a[25]是用桶排序分别储存a,b,c…z的出现次数。
口算练习题[P1957]
题目描述
王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5+8 的算式最好只要输入 5 和 8,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13 以及该算式的总长度 6。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。
输入格式
第一行一个整数 i 。
接着的 i 行为需要输入的算式,每行可能有三个数据或两个数据。
若该行为三个数据则第一个数据表示运算类型,a 表示加法运算,b 表示减法运算,c 表示乘法运算,接着的两个数据表示参加运算的运算数。
若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。
输出格式
输出 2*i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度。
样例
-
样例输入
4
a 64 46
275 125
c 11 99
b 46 64
-
样例输出
64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9
-
提示
- 第一个算式一定有三个数据。
- 对于所有数据,0<i<=50,运算数为非负整数且小于 10000。
蒟蒻思路:每次输入两或三个字符串。通过判断第一个字符串的第0号元素是否为a/b/c来决定是否输入三个字符串,同时决定是否进行上一次类型的运算。每一次运算都是先获得两个数字的长度、其对应的整形以及它们的和、差或积。再根据结果的情况计算出输出语句的长度,最后输出即可。对于不输入字母的情况,只需要定义全局变量,每进行一次运算,就将其更改为特定的值,这样当没有输入abc的时候只需要根据全局变量的值进行选择分支就可以。
#include<stdio.h>
int kase = 0;
void add_work(char str2[6],char str3[6]){
kase = 1;
int i,len2,len3,len4 = 1,m = 0,n = 0;
for(i = 0;str2[i]!='\0';i++){
m*=10;
m+=str2[i]-48;
}
len2 = i;
for(i = 0;str3[i]!='\0';i++){
n*=10;
n+=str3[i]-48;
}
len3 = i;
int k = m+n;
if(k!=0)
for(len4 = 0;k!=0;len4++)
k/=10;
printf("%s+%s=%d\n%d\n",str2,str3,m+n,len2+len3+len4+2);
}
void minus_work(char str2[6],char str3[6]){
kase = 2;
int i,len2,len3,len4 = 1,m = 0,n = 0;
for(i = 0;str2[i]!='\0';i++){
m*=10;
m+=str2[i]-48;
}
len2 = i;
for(i = 0;str3[i]!='\0';i++){
n*=10;
n+=str3[i]-48;
}
len3 = i;
int k = m-n>=0?m-n:n-m;
if(k!=0)
for(len4 = 0;k!=0;len4++)
k/=10;
printf("%s-%s=%d\n%d\n",str2,str3,m-n,(m-n>=0)?len2+len3+len4+2:len2+len3+len4+3);
}
void multiply_work(char str2[6],char str3[6]){
kase = 3;
int i,len2,len3,len4 = 1,m = 0,n = 0;
for(i = 0;str2[i]!='\0';i++){
m*=10;
m+=str2[i]-48;
}
len2 = i;
for(i = 0;str3[i]!='\0';i++){
n*=10;
n+=str3[i]-48;
}
len3 = i;
int k = m*n;
if(k!=0)
for(len4 = 0;k!=0;len4++)
k/=10;
printf("%s*%s=%d\n%d\n",str2,str3,m*n,len2+len3+len4+2);
}
int main()
{
int n;
char str1[6],str2[6],str3[6];
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%s",str1);
if(str1[0]=='a'||str1[0]=='b'||str1[0]=='c'){
scanf("%s",str2);
scanf("%s",str3);
if(str1[0]=='a')
add_work(str2,str3);
else if(str1[0]=='b')
minus_work(str2,str3);
else if(str1[0]=='c')
multiply_work(str2,str3);
}
else{
scanf("%s",str2);
if(kase==1)
add_work(str1,str2);
else if(kase==2)
minus_work(str1,str2);
else if(kase==3)
multiply_work(str1,str2);
}
}
return 0;
}
感觉还可以改进,但是大脑死机了= =