一.目的
今天做了几道水题,发现了几种自己没有的解题思路,就总结一下。
题目大意:
1:手机
http://codevs.cn/problem/1461/
2:求素数和
http://codevs.cn/problem/1462/
1.手机的解题思路
本题是求对于给出的字符,你所点击手机按键的次数,因为每一个数字
按键都对应相应的字符,按一下出现第一个字符,按两下出现第二个字
符,所以我一开始的思路是用一个二维数组将0-9每个数字所对应的字
符保存起来,然后用所给的字符串中的每一个字符在二维数组中查找,
看他是每一行的第几个就加几。后来,又有一种思路,很神奇,就是直
接将每一个字符中的所对应的按键次数找到并分类1,2,3,4,然后
在对应去判断,这样极大节约了时间,这种依题解题的思路很方便。
2:代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char c[10005];
int main()
{
memset(c,'0',sizeof(c));
int sum=0;
gets(c);
for(int i=0;;i++)
{
if(c[i]==' ')sum+=1;
if(c[i]=='a'||c[i]=='d'||c[i]=='g'||c[i]=='j'||c[i]=='m'||c[i]=='p'||c[i]=='t'||c[i]=='w')sum+=1;
if(c[i]=='b'||c[i]=='e'||c[i]=='h'||c[i]=='k'||c[i]=='n'||c[i]=='q'||c[i]=='u'||c[i]=='x')sum+=2;
if(c[i]=='c'||c[i]=='f'||c[i]=='i'||c[i]=='l'||c[i]=='o'||c[i]=='r'||c[i]=='v'||c[i]=='y')sum+=3;
if(c[i]=='s'||c[i]=='z') sum+=4;
if(c[i]=='0')break;
}
cout<<sum<<endl;
}
3.求素数和的解题思路
素数是一种只能被一和自己整除的数,任意一个非质数的数它的最小因
子一定小于根号下这个数,如果在2到根号下这个数内没有找到他的最
小因子,那么这个数为质数,这样极大节约了时间。
4.代码
#include<stdio.h>
#include<math.h>
int zs(int n)
{int i,j;
for(i=2;i<=sqrt(n);i++) //这里的sqrt(n)很关键极大节约了时间
if (n % i==0)
return 0;
if (n>2) return 1;
}
int main()
{int a,b,i,s=0;
scanf("%d%d",&a,&b);
if (a>b) {i=a;a=b;b=i;}
for (i=a+1;i<b;i++) if (zs(i)) s+=i;
printf("%d",s);
}