1.回文数的判读:
题目:
给定一个数,然后将其倒过来相加,如果和不是回文串,那么将和再采取同样的操作,判断这个数在7步之内能不能变成回文数,如果能,则输出这个回文数,如果不能,则输出0,变化规则如下述例子所示
例如 68
代码:68+86=154
154+451=605
605+506=1111,
1111是回文数,输出1111.
import java.util.Scanner; public class Demo1 { //给定一个数,然后将其倒过来相加,如果和不是回文串, //那么将和再采取同样的操作,判断这个数在7步之内能不能变成回文数, //如果能,则输出这个回文数,如果不能,则输出0,变化规则如下述例子所示 public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int count = 7,sum; boolean flag = false ; int value = scan.nextInt(); int value1 = change(value); sum = value+value1; while(count-->=0){ flag = huiwen(sum); if(flag){ System.out.println(sum); break; } sum = sum+change(sum); } if(!flag){ System.out.println("0"); } } } private static boolean huiwen(Integer sum) {//12321 //回文数是左右对称的 String str = sum.toString(); char[] arr = str.toCharArray(); for(int i=0;i<arr.length/2;i++){ if(arr[i]!=arr[arr.length-i-1]){ return false; } } return true; } private static int change(Integer value) { String str = value.toString(); StringBuffer sb = new StringBuffer(); char[] arr = str.toCharArray(); for(int i=arr.length-1;i>=0;i--){ sb.append(arr[i]); } return Integer.parseInt(sb.toString()); } }
2.数组比较:
• 问题描述:
比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数
比如:
数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0
数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3
• 要求实现函数:
int array_compare(int len1, int array1[], int len2, int array2[])
【输入】 int len1:输入被比较数组1的元素个数;
int array1[]:输入被比较数组1;
int len2:输入被比较数组2的元素个数;
int array2[]:输入被比较数组2;
【输出】 无
【返回】 不相等元素的个数,类型为int
代码:
import java.util.Scanner; public class Demo2 { //比较两个数组,要求从数组最后一个元素开始逐个元素向前比较, //如果2个数组长度不等,则只比较较短长度数组个数元素。 //请编程实现上述比较,并返回比较中发现的不相等元素的个数 public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("输入数组1的元素个数:"); int len1 = scan.nextInt(); int[] arr1 = new int[len1]; System.out.println("输入数组1的元素:"); for(int i=0;i<arr1.length;i++){ int value1 = scan.nextInt(); arr1[i] = value1; } System.out.println("输入数组2的元素个数:"); int len2 = scan.nextInt(); int[] arr2 = new int[len2]; System.out.println("输入数组2的元素:"); for(int i=0;i<arr2.length;i++){ int value2 = scan.nextInt(); arr2[i] = value2; } int k = array_compare(len1, arr1,len2,arr2); System.out.println("不相等的元素个数为: "+k); } private static int array_compare(int len1, int[] arr1, int len2, int[] arr2) { int num = (len1>=len2?len2:len1); int count = 0; for(int i=len1-1,j=len2-1;num>0;i--,j--,num--){ if(arr1[i]!=arr2[j]){ count++; } } return count; } }
3.编写函数string deletestring(string str,string sub_str)从str中查找匹配的字符串sub_str,采用最左匹配,且输出形式为str+"_"+匹配的次数:
代码如下:
import java.util.Scanner; public class Demo3 { //编写函数string deletestring(string str,string sub_str) //从str中查找匹配的字符串sub_str,采用最左匹配, //且输出形式为str+"_"+匹配的次数: public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("输入str字符串:"); String str = scan.next(); System.out.println("输入sub_str字符串:"); String sub_str = scan.next(); int k = deletestring(str,sub_str); System.out.println(str+" "+k); } private static int deletestring(String str, String sub_str) { int len = sub_str.length(); int count = 0 ; for(int i=0;i<str.length()-len;i++){ String str1 = str.substring(i, len+i); if(str1.equals(sub_str)){ count++; } } return count; } }
7:只有一对
代码:(自我感觉效率很低,有更好的希望一起分享)
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Set; public class Demo4 { //一副牌中发五张扑克牌给你:让你判断数字的组成: //有以下几种情况: //1:四条:即四张一样数值的牌(牌均不论花色)(有两组) // 2:三条带一对(有两组) // 3:三条带两张不相同数值的牌(有三组) // 4:两对(有三组) // 5:顺子 包括 10,J,Q,K,A(有五组) // 6:什么都不是(有五组) // 7:只有一对 (有四组) public static void main(String[] args) { String[] arr = new String[]{"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; String[] arr1 = new String[5]; Map<String,Integer> map = new HashMap<String, Integer>(); for(int i=0;i<5;i++){ int k = new Random().nextInt(arr.length); arr1[i] = arr[k]; } System.out.println("随机的五张扑克为:"); for(int i=0;i<5;i++){ System.out.print(arr1[i]+" "); } if(arr1[0].equals("10")&&arr1[1].equals("J")&&arr1[2].equals("Q")&&arr1[3].equals("K")&&arr1[4].equals("A")){ System.out.println("数字组成为:顺子"); } for(int i=0;i<5;i++){ Integer times = map.get(arr1[i]); map.put(arr1[i], times==null?1:times++); } Set<String> set = map.keySet(); int size = set.size(); int xiabiao = 0; System.out.println("size="+size); boolean flag1 = false; boolean flag2 = false; for(Iterator<String> it = set.iterator();it.hasNext();){ String key = it.next(); int value = map.get(key); if(value==4){ flag1 = true; } if(value==3){ flag2 = true; } } if(size==2){ if(flag1){ System.out.println("数字组成为:四条"); } if(flag2){ System.out.println("数字组成为:三条带一对"); } } if(size==3){ if(flag2){ System.out.println("数字组成为:三条带两张不相同数值的牌"); }else{ System.out.println("数字组成为:两对"); } } if(size==4){ System.out.println("数字组成为:只有一对"); } if(size==5){ for(int i=0;i<arr.length;i++){ if(arr[i]==arr1[0]){ xiabiao=i; if(arr[xiabiao+1].equals(arr1[1])&&(xiabiao+1)<arr.length&&arr[xiabiao+2].equals(arr1[2]) &&(xiabiao+2)<arr.length&&arr[xiabiao+3].equals(arr1[3])&&(xiabiao+3)<arr.length &&arr[xiabiao+4].equals(arr1[4]) &&(xiabiao+4<arr.length)){ System.out.println("数字组成为:顺子"); }else{ System.out.println("数字组成为:什么都不是"); } break; } } } } }
5.
我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:
1、 长度13位;
2、 以86的国家码打头;
3、 手机号码的每一位都是数字。
请实现手机号码合法性判断的函数要求:
1) 如果手机号码合法,返回0;
2) 如果手机号码长度不合法,返回1
3) 如果手机号码中包含非数字的字符,返回2;
4) 如果手机号码不是以86打头的,返回3;
代码如下:
import java.util.Scanner; public class Demo5{ //1) 如果手机号码合法,返回0; //2) 如果手机号码长度不合法,返回1 //3) 如果手机号码中包含非数字的字符,返回2; //4) 如果手机号码不是以86打头的,返回3; public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String inMsisdn = scan.next(); int k = verifyMsisdn(inMsisdn); System.out.println(k); } } private static int verifyMsisdn(String inMsisdn) { char[] arr = inMsisdn.toCharArray(); int flag = 0; if(arr.length!=13){ flag = 1; return flag; } if(!inMsisdn.matches("^[0-9]*$")){ flag = 2; return flag; } if(!inMsisdn.substring(0, 2).equals("86")){ flag = 3; return flag; } return flag; } }