手机和求素数和(水题)

一.目的

今天做了几道水题,发现了几种自己没有的解题思路,就总结一下。

题目大意:

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);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值