53:素数回文数的个数
描述
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
输入
一个大于11小于1000的整数n。
输出
11到n之间的素数回文数个数。
样例输入
23
样例输出
1
import java.util.*;
public class Main
{
static boolean check1(int x)
{
int i;
for(i = 2; i < x; i++)
{
if(x % i == 0)
break;
}
if(x == i)
return true;
return false;
}
static boolean check2(int x)
{
int i;
int cnt = 0;
int[] a = new int[4];
boolean flag = true;
while(x != 0)
{
a[++cnt] = x % 10;
x /= 10;
}
for(i = 1; i <= cnt; i++)
{
if(a[i] != a[cnt+1-i])
{
flag = false;
break;
}
}
if(flag == false)
return false;
return true;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int cnt = 0;
for(int i = 11; i <= n; i++)
{
if(check1(i)==true&&check2(i)==true)
cnt++;
}
System.out.println(cnt);
}
}
54:肿瘤检测
描述
一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255。我们假设给定的图像中有且只有一个肿瘤。在图上监测肿瘤的方法如下:如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。肿瘤的边界点的个数称为肿瘤的周长。现在给定一个图像,要求计算其中的肿瘤的面积和周长。
输入
输入第一行包含一个正整数N(0 < N <= 100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。
输出
输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。
样例输入
6 99 99 99 99 99 99 99 99 99 50 99 99 99 99 49 49 50 51 99 50 20 25 52 99 40 50 99 99 99 99 99 99 99 99 99 99
样例输出
9 8
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] a = new int[n+5][n+5];
int s = 0;
int l = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
a[i][j] = in.nextInt(); //输入数组
if(a[i][j] <= 50)
s++; //计算面积,小于等于50就加1
}
}
for(int i = 2; i <= n-1; i++)
{
for(int j = 2; j <= n-1; j++)
{
if(a[i][j] <= 50 && a[i-1][j]<=50 && a[i+1][j]<=50 && a[i][j-1]<=50 && a[i][j+1]<=50)
l++; //四个数全小于等于50,加1
}
}
System.out.println(s + " " + (s - l)); //周长为s-l,根据题意只要有一个大于50可加1,去掉s里去掉四个全小于等于50的即为周长
}
}
55:不吉利日期
描述
在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)
输入
输入有一行,即一月一日星期几(w)。(1 <= w <= 7)
输出
输出有一到多行,每行一个月份,表示该月的13日是星期五。
样例输入
7
样例输出
1 10
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] a = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if((n+12)%7==5)
System.out.println("1"); //判断一月的13号是否为周五
for(int i=1;i<=11;i++)
{
n = (n+a[i])%7;
if((n+12)%7==5)
System.out.println(i+1); //判断其他月份的13号是否为周五
}
}
}
56:数制转换
描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
a,b是十进制整数,2 =< a,b <= 16。
输出
输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
样例输入
15 Aab3 7
样例输出
210306
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int a=in.nextInt();
String m=in.next();
int b=in.nextInt();
int n=Integer.parseInt(m,a) ;
String p;
p=Integer.toString(n,b);
char []P=p.toCharArray();
for(int i=0;i<P.length;i++)
{
if((P[i]<='z')&&(P[i]>='a'))
P[i]=(char)(P[i]-32); //小写字母换为大写
}
String q=new String (P);
System.out.println(q);
}
}