- hdu1431
Problem Description
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
Input
这里有许多组数据,每组包括两组数据a跟b。
Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
Sample Input
5 500
Sample Output
5
7
11
101
131
151
181
191
313
353
373
383
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int is_prime(int x)
{
int i;
if(x==1)
return 0;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int is_huiwen(int x)
{
int i,n=0,s[10];
while(x)
{
s[n++]=x%10;
x/=10;
}
for(i=0;i<=n/2-1;i++)
{
if(s[i]!=s[n-i-1])
return 0;
}
return 1;
}
int main()
{
int a,b,j;
while(scanf("%d %d",&a,&b)!=EOF)
{
for(j=a;j<=b&&j<10000000;j++)
{
if(is_huiwen(j)&&is_prime(j))
printf("%d\n",j);
}
printf("\n");
}
return 0;
}
- hdu3068
-
#include<stdio.h> #include<stdlib.h> #include<math.h> int is_prime(int x) { int i; if(x==1) return 0; for(i=2;i<=sqrt(x);i++) { if(x%i==0) return 0; } return 1; } int is_huiwen(int x) { int i,n=0,s[10]; while(x) { s[n++]=x%10; x/=10; } for(i=0;i<=n/2-1;i++) { if(s[i]!=s[n-i-1]) return 0; } return 1; } int main() { int a,b,j; while(scanf("%d %d",&a,&b)!=EOF) { for(j=a;j<=b&&j<10000000;j++) { if(is_huiwen(j)&&is_prime(j)) printf("%d\n",j); } printf("\n"); } return 0; }
nyist37
-
描述
所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
输入
第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.
输出
每行输出所需添加的最少字符数
样例输入
1
Ab3bd
样例输出
2
#include <stdio.h> #include <string.h> int dp[1010][1010]; int main() { char s1[1010],s2[1010]; int n,i,j,len; scanf("%d",&n); while(n--) { scanf("%s",&s1[1]); len=strlen(&s1[1]); for(i=1;i<=len;i++) { s2[i]=s1[len-i+1]; } s2[len+1]='\0'; dp[0][0]=0; for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(s1[i]==s2[j]) { dp[i][j]=dp[i-1][j-1]+1; } else { dp[i][j]=dp[i][j-1]>dp[i-1][j]?dp[i][j - 1] : dp[i - 1][j]; } } } printf("%d\n",len-dp[len][len]); } return 0; }