2023/08/04
“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。 输入格式: 输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。 输出格式: 输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。 输入样例 1: $ 9 @ @@@@@ @@@ @@@ @ @ @ @@@ @@@ @@@ @@@@@ @@@ @ @ @ @@@ @@@@@ @ @ @ @ @ @@@@@ 输出样例 1: $$$$$ $ $ $ $ $ $$$$$ $$$ $ $ $ $$$ $$$$$ $$$ $$$ $$$ $ $ $ $$$ $$$ $$$$$ $ 输入样例 2: & 3 @@@ @ @@@ 输出样例 2: bu yong dao le &&& & &&&
import java.util.Scanner; public class Main{ public static void main(String[]args) { Scanner sc=new Scanner(System.in); String x=sc.next(); int n=sc.nextInt(); boolean flag=true; String[] w=new String[n]; sc.nextLine(); for(int i=0;i<n;i++) { w[i]=sc.nextLine(); } for(int i=0;i<n;i++)//横行转置 { int j=n-1-i; StringBuilder sb=new StringBuilder(w[i]); if(!w[i].equals(w[j])) { flag=false; } w[i]=sb.reverse().toString(); } for(int i=0;i<n;i++) { StringBuilder sb=new StringBuilder(w[i]); for(int j=0;j<w[i].length();j++) { char indexchar=w[i].charAt(j); if(indexchar!=' ') { sb.replace(j,j+1,x); } } w[i]=sb.toString(); } if(flag) { System.out.println("bu yong dao le"); } for(int i=n-1;i>=0;i--) { System.out.println(w[i]); } } }
“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”! 本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。 输入格式: 输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。 输出格式: 从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。 输入样例: it is so 666 really 6666 what else can I say 6666666666 输出样例: it is so 666 really 9 what else can I say 27
这题用了两种方法,第一种测试点上有一点小错误,开始的时候的想法来做的,步骤比较繁琐
然后第二种是看了看网上的思路然后自己再写了一遍,由于Java和C数组不太一样,所以还是得有自己的想法进行修改的
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String a=sc.nextLine(); int num=0,m=0,s=0,l=0;//记录字符组合数 for(int i=0;i<a.length();i++) { if(a.charAt(i)==' ') { num++; } } StringBuilder sb1=new StringBuilder(a); num++;//字符组合数比空格数多1 for(int i=0;i<num;i++) { int n=0;//6的数量 s=m;//组合的开始位置 boolean flag=true; StringBuilder sb2=new StringBuilder();//创建空串 for(int j=m;j<sb1.length();j++) { m++;//下次录入的开始位置 if(i!=num-1) { l=m-1;//这个组合的结束位置 } else l=m; if(sb1.charAt(j)!=' ') { sb2.append(sb1.charAt(j)); } else { break;//记录完一个字符组合 } } for(int j=0;j<sb2.length();j++) { if(sb2.charAt(j)!='6') { flag=false;//字符中有除了6以外的数字做标记 } } if(flag) { for(int j=0;j<sb2.length();j++) { if(sb2.charAt(j)=='6') { n++; } } } if(n>3&&n<9) { sb1.replace(s,l,"9"); m=m-sb2.length()+1; } else if(n>9) { sb1.replace(s,l,"27"); m=m-sb2.length()+2; } } System.out.println(sb1); } }
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); String a=sc.nextLine(); StringBuilder sb=new StringBuilder(a); //这里给加长一个非6的字符,java不像C超出数组范围就会报错,这就会导致最后一个元素很可能不会打印出来 sb.append(" "); a=sb.toString(); int count=0; for(int i=0;i<a.length();i++) { if(a.charAt(i)=='6') { count++; continue; } if(count>9) { System.out.print("27"); } else if(count>3) { System.out.print("9"); } else { for(int j=0;j<count;j++) { System.out.print("6"); } } if(i!=a.length()-1)//设置加长的部分一定不会打印 System.out.print(a.charAt(i)); count=0; } } }