130道基础OJ编程题之: 39 ~ 46 道
文章目录
OJ技巧
#include <stdio.h>
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
printf("%d\n", a + b);
}
return 0;
}
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a + b);
}
}
}
0. 昔日OJ编程题:
130道基础OJ编程题之: 1~7道_ChinaRainbowSea的博客-CSDN博客
130道基础OJ编程题之: 8~19 道_ChinaRainbowSea的博客-CSDN博客
130道基础OJ编程题之: 20~28_ChinaRainbowSea的博客-CSDN博客_
130道基础OJ编程题之: 29 ~ 38 道_ChinaRainbowSea的博客-CSDN博客
39. BC41 你是天才吗?
你是天才吗?_牛客题霸_牛客网 (nowcoder.com)
C语言实现:
思路: 直接使用 scanf( )
输入数值,再判断并输出结果
#include<stdio.h>
int main()
{
int genius = 100;
scanf("%d",&genius);
if(genius >= 140)
{
printf("Genius\n");
}
return 0;
}
Java实现:
思路: 同样是直接输入,并判断结果是否符合条件。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int genius = scanner.nextInt();
if(genius >= 140) {
System.out.println("Genius");
}
}
}
40. BC42 完美成绩
C语言实现:
思路: 直接从键盘中输入,并判断结果是否符合条件。
#include<stdio.h>
int main()
{
int perfect = 0;
scanf("%d",&perfect);
if(perfect >= 90 && perfect <= 100)
{
printf("Perfect\n");
}
return 0;
}
Java实现:
思路: 直接从键盘中输入,并判断结果是否符合条件。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int perfect = scanner.nextInt();
if(perfect >= 90 && perfect <= 100) {
System.out.println("Perfect");
}
}
}
41. BC43 及格分数
c语言实现:
思路: 使用多组输入的方式while(~scanf("%d",&gender))
,并对结果进行判断
#include <stdio.h>
int main()
{
int gender = 0;
while(~scanf("%d",&gender)) // 或者 scanf("%d",&gender) != EOF
{
if(gender >= 60)
{
printf("Pass\n");
}
else
{
printf("Fail\n");
}
}
return 0;
}
java实现:
思路: 注意多组输入的内容while(scanner.hasNextInt())
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()) { // 多组输入
int genders = scanner.nextInt();
if(genders >= 60) {
System.out.println("Pass");
} else {
System.out.println("Fail");
}
}
}
}
42. BC44 判断整数奇偶性
判断整数奇偶性_牛客题霸_牛客网 (nowcoder.com)
C语言实现:
思路: 多组输入 while(scanf("%d",&num)!=EOF)
,并对结果进行判断。
#include <stdio.h>
int main()
{
int num = 0;
while(scanf("%d",&num)!=EOF) // 或者~scanf("%d",num)对EOF(-1)取反,为 0 假
{
if(num % 2 == 0)
{
printf("Even\n");
}
else
{
printf("Odd\n");
}
}
return 0;
}
java实现:
思路: 多组输入整数 while(scanner.hasNextInt())
类型。并判断结果
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()) { // 多组输入整数
int num = scanner.nextInt();
if(num % 2 == 0 ) {
System.out.println("Even");
} else {
System.out.println("Odd");
}
}
}
}
43. BC45 最高分数
C语言实现:
方式一:
思路: 使用 scanf("%d %d %d")
格式的输入,存在空格就不行使用上空格。
#include<stdio.h>
int main()
{
int gender1 = 0;
int gender2 = 0;
int gender3 = 0;
scanf("%d %d %d",&gender1,&gender2,&gender3);
int max = gender1 > gender2 ? gender1 : gender2;
max = max > gender3 ? max : gender3;
printf("%d",max);
return 0;
}
方式二:
思路: 使用数组将多个输入的值存储起来,因为空格本身就可以作为是分割输入的。
#include<stdio.h>
int main()
{
int arr[3] = {0};
int max = 0;
for(int i = 0 ; i < 3; i++)
{
scanf("%d",&arr[i]);
// max = arr[0];
if(arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n",max);
return 0;
}
java实现:
思路: 和上述C语言实现的第二个方式一样,同样是使用数组将数据存储起来,并做判断,因为空格本身就可以作为是输入的分割。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[3]; // 通过new的方式创建数组,并指定其大小
int max = 0;
for(int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println(max);
}
}
44. BC46 判断是元音还是辅音
判断是元音还是辅音_牛客题霸_牛客网 (nowcoder.com)
C语言实现:
方式一:
思路: 通过定义创建一个数组,存储元音,通过循环判断你输入的字符是否,符合元音,注意多组输入的内容。以及注意,你需要将最后的空格读取掉,因为根据题意,你每次的输入后面,存在一个空格。所以必须解决。不然会出现读取到空格的,错误的进行了一个判断。注意for
循环中的结束判断语句,
- 当找了,匹配的元音的字符内容,就打印相应的结果信息,使用上
break
跳出本次for循环,因为找了。 - 如果结束了,for 循环,
if(i == sizeof(arrs)/sizeof(char))
表示存有元音的数组都遍历完了,也没有找到,也就不存在。
#include<stdio.h>
int main()
{
char c = 0;
char arrs[] = "AEIOUaeiou"; // 创建数组存储元音信息
while(scanf("%c",&c)!= EOF) // 多组输入 或者是 ~scanf("%d",&c)
{
int i = 0;
for(i=0; i < sizeof(arrs)/sizeof(char);i++)
{
if(c == arrs[i])
{
printf("Vowel\n");
break;
}
}
if(i == sizeof(arrs)/sizeof(char))
{
printf("Consonant\n");
}
getchar(); // 读取到空格,多组输入
}
return 0;
}
方式二:
思路: 使用 (c = getchar())!=EOF
代替 while(scanf("%c",&c)!= EOF)
的输入。
#include<stdio.h>
int main()
{
char c = 0;
char arrs[] = "AEIOUaeiou"; // 创建数组存储元音信息
while((c = getchar())!=EOF) // 多组输入 或者是 ~scanf("%d",&c)
{
int i = 0;
for(i=0; i < sizeof(arrs)/sizeof(char);i++)
{
if(c == arrs[i])
{
printf("Vowel\n");
break;
}
}
if(i == sizeof(arrs)/sizeof(char))
{
printf("Consonant\n");
}
getchar(); // 读取到空格,多组输入
}
return 0;
}
方式三:
思路: 在 while(~scanf("%c\n",&c))
多一个 \n
替换掉上述两个方式中的 读取最后一个空格的内容 ,防止判断错误信息。
#include<stdio.h>
int main()
{
char arrs[] = "AEIOUaeiou";
char c = 0;
while(~scanf("%c\n",&c)) // 多组输入,内容,这里使用\n 读取最后多余的空格内容.
{
int i = 0;
for(;i < sizeof(arrs)/sizeof(char);i++)
{
if(c == arrs[i])
{
printf("Vowel\n");
break; // 是元音跳出循环
}
}
if(i == sizeof(arrs)/sizeof(char)) // 当i = 数组的大小长度则表示,没有找到,因为你存有的元音数组都遍历完了都没有找到,就是没有了
{
printf("Consonant\n");
}
}
}
方式四:
思路: 使用C语言的标准库函数const char * strchr ( const char * str, int character );
判断指定的字符在数组中的下标位置,从该下标位置从 1 开始,不是 0 注意了。
#include<stdio.h>
#include<string.h>
int main()
{
char c = 0;
char arr[] = "AEIOUaeiou";
while(~scanf("%c\n",&c))
{
if(strchr(arr,c) > 0) // 判断字符在字符数组的所在下标位置注意.是没有0,起始下标是1 ,没有0
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
java实现:
方式一:
思路: 将元音信息存储到字符串数组中,再使用 public boolean equalsIgnoreCase(String anotherString)
字符串方法,比较判断输入的两个字符串的大小,这里使用的 equalsIgnoreCase 方法是不区分大小写的。而 equals 是区分大小写的。注意Java当中的多组数据的输入。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] strs = {"A","E","I","O","U"};
while(scanner.hasNext()) { // 多组输入字符串内容,注意nexttLinue() 与 next() 的区别
String s = scanner.next();
int i = 0;
for(; i < strs.length;i++) {
if(s.equalsIgnoreCase(strs[i])){ // 比较连个字符串的大小,不区分大小写
System.out.println("Vowel");
break; // 找到了,满足元音的条件,跳出循环
}
}
if(i == strs.length) { // 字符串都遍历完了,还没有匹配上就是没有了.
System.out.println("Consonant");
}
}
}
}
方式二:
思路: 使用 public boolean equals(Object anObject)
方法判断字符串是否相等,通过循环遍历,该方法是区分大小写比较判断的
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] strs = {"A","E","I","O","U","a","e","i","o","u"};
while(scanner.hasNext()) { // 多组数据的输入
String s = scanner.next();
int i = 0;
for(i = 0; i < strs.length;i++) {
if(strs[i].equals(s)) { ;// equals判断两个字符串是否相等,区分大小写.
System.out.println("Vowel");
break; // 匹配是元音,跳出循环
}
}
if(i == strs.length) { // 字符串都遍历完了,还没有匹配上就是没有了
System.out.println("Consonant");
}
}
}
}
45. BC47 判断是不是字母
判断是不是字母_牛客题霸_牛客网 (nowcoder.com)
C语言实现:
方式一:
思路: 多组输入,使用 if((c >= 'A' && c <= 'Z') || (c >='a' && c <= 'z'))
判断是不是字母,注意根据题意最后存在一个空格,我们需要读取到这个空格去了。防止影响后面的判断。
#include<stdio.h>
int main()
{
char c = 0;
while((scanf("%c",&c) != EOF)) // 多组输入
{
if((c >= 'A' && c <= 'Z') || (c >='a' && c <= 'z')) // 判断是不是字母
{
printf("%c is an alphabet.\n",c);
}
else
{
printf("%c is not an alphabet.\n",c);
}
getchar(); // 读取掉最后的空格内容,防止判断错误
}
return 0;
}
方式二:
思路: 使用C语言中的标准库函数int isalpha ( char c )
判断字符是否是 字母。 是返回 1 true ,不是返回 0 false。
#include<stdio.h>
#include<ctype.h>
int main()
{
char c = 0;
while(scanf("%c",&c) != EOF)
{
if(isalpha(c)) // 判断字符是不是字母,头文件#include<ctype.h>
{
printf("%c is an alphabet.\n",c);
}
else
{
printf("%c is not an alphabet.\n",c);
}
getchar(); // 读取多余的空格内容
}
return 0;
}
Java实现:
方式一:
思路: 和上述C语言实现的方式一是一样的,注意Java的多组输入的内容,因为Java当中的 scanner.next()
方法是获取键盘中输入的字符串内容,不会读取到空格,所以不需要做空格处理,因为Java当中没有获取 char 类型的字符的方法,所以我们变向的获取字符串,再通过对字符串取下标为 0 的字符,的方式获取到输入的字符,再进行一判断。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
char c = scanner.next().charAt(0);
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
System.out.println(c+" is an alphabet.");
}
else
{
System.out.println(c+" is not an alphabet.");
}
}
}
}
方式二:
思路: 使用Java当中的方法,public static boolean isLetter(char ch)
判断字符 是否是 字母,是的话返回 true,不是返回 false .注意Java当中没有读取字符的方法,所以我们使用读取到字符串,再获取到字符串的内容,截取字符串下标为 0 的字符数据,进行判断。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
char c = scanner.next().charAt(0); // 获取到字符串输入的内容的第一字符内容
if(Character.isLetter(c)) { // isLetter判断字符是否是字母
System.out.println(c+" is an alphabet.");
} else {
System.out.println(c+" is not an alphabet.");
}
}
}
}
46. BC48 字母大小写转换
字母大小写转换_牛客题霸_牛客网 (nowcoder.com)
C语言实现:
方式一:
思路: 从上图的 ASCII 码表,我们可以发现,每个的字母的大小写之间相差了,32 数值的大小。利用这一点,我们可以实现字母的大小写转换。
#include<stdio.h>
int main()
{
char c = 0;
while((scanf("%c",&c)) != EOF)
{
if(c >= 'A' && c <= 'Z') //判断字母大写,转为为小写+32
{
printf("%c\n",c+32);
}
else // 判断字母为小写,转为大写-32
{
printf("%c\n",c-32);
}
getchar(); // 处理读取多余的空格内容,防止最后的判断错误
}
return 0;
}
方式二:
思路: 使用C语言标准的库函数,使用int islower ( int c )
判断字符是否是大写的字母,是返回 1 true, 不是返回 0 false 。注意参数 **int c ** 可以是字符,因为字符就是 数值的另外一种表示形式,再使用 int toupper ( int c );, 大写等效于 c(如果存在此类值),否则为*c*(未更改)。该值作为
int值返回,该值可以隐式转换为
char。使用
int tolower ( int c )
表示将大写字母转为小写字母。小写等效于 c(如果存在此类值),否则为c(不变)。该值作为int
值返回,该值可以隐式转换为char
。
#include<stdio.h>
#include<ctype.h>
int main()
{
char c = 0;
while((scanf("%c",&c)) != EOF) // 多组数据的输入
{
if(islower(c)) // 判断字符是不是字母,是返回1true,不是0 false
{
printf("%c\n",toupper(c)); // toupper()将小写字母转换为大写字母,#include<ctype.h> 头文件的导入
}
else
{
printf("%c\n",tolower(c)); // tolower()将大写字母转换为小写字母
}
getchar(); // 读取掉多余的空格,防止判断错误
}
return 0;
}
Java实现:
思路: 注意题意:多组数据的输入,Java的多组数据的输入。注意因为Java当中是没有对 char
字符类型的输入的所以这里我们使用输入字符串的格式,Scanner.next() 该方法读取不到空格,所以我们不需要对对于的空格进行一个处理的操作,当我们获取到输入的字符串之后,再通过String.charAt(0) 的方法,获取到字符串下标为 0 的字符内容,这样我们就变相的获取大键盘上输入的字符了,再通过 if() 语句的判断,判断对应的大小写字母,如果使用 System.out.println((char)(c+32)) 的方法打印显示,需要注意显示使用上,强制类型 为字符打印显示处理。
或者使用 Java当中的格式输入 System.out.printf(“%c\n”,c-32);
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
char c = scanner.next().charAt(0); // 将读取道的字符串,获取到字符串下标为 0 的字符内容.
if(c >= 'A' && c <= 'Z') { // 判断字符是否是大写字母
System.out.println((char)(c+32)); // 将数值强制转为字符
} else {
// System.out.println((char)(c-32));
// 或者是使用 printf()中的格式输出
System.out.printf("%c\n",c-32);
}
}
}
}
总结:
理解C语言中的
~scanf("%d",&x)
与scanf("%d",&x) != EOF
的相似之处,EOF 是 -1,~-1 对负1 取反后为 0 (假)。注意使用C语言和Java语言的多组数据的输入 while(scanf()!=EOF) ;java: while(Scanner.hasNext())字符/ while(Scanner.hasNextInt())数值类型的多组输入内容。
注意在C语言中题目可以存在多余的空格的输入,我们会读取到这个没有的空格,导致这个空格替换掉了我们真正想要读取的内容。所以我们需要多读取一次去掉这个空格,防止影响后面的判断,方法一: getchar();方法二: scanf(“%d\n”,&x) 通过对输入时多加一个 \n ,同样可以达到读取到无用多余的空格问题。Java当中的 next() 时不会读取空格了,所以不要处理空格。
C语言中计算数组大小的方法:sizeof(数组的首地址)/sizeof(数组元素类型)
const char * strchr(const char * str, int character) 判断指定的字符在数组当中的下标位置,注意该下标的起始位置时从 1 开始的,并不是 0 开始的,这一点。
const char * strchr ( const char * str, int character );`判断指定的字符在数组中的下标位置,从该下标位置从 1 开始,不是 0 注意了。
public boolean equalsIgnoreCase(String anotherString) 比较两个字符串的内容是否相等,该方法不区分字符的大小写,而 public boolean equals(Object anObject) 方法同样时比较两个字符串的内容是否相等,注意: 该方法区分字符串内容的大小写的。
C语言:int isalpha (char c) 判断字符是否是 字母 , 是返回 1 true ,不是返回 0 false
在Java当中是没有 char 的方法输入的,所以我们需要将 char c = scanner.next().charAt(0);语句的意思是使用Scanner.next()从显示/键盘中读取到字符串,再通过将String.charAt(0) 获取到字符串下标为 0 的字符内容,赋值到 char 字符类型,注意获取到的本身就是字符类型。
Java当中的Character类中的方法,Character是在java.lang.Object包下的所以不需要导入包,便可以直接使用的。Character.isLetter(char c ) 该方法表示判断参数,字符是否是 字母 。是返回 true,不是返回 false;
C语言中: int toupper(int c) 将大写字母转换为小写字母,如果是字母的话,不是的话,保留(不修改),int tolower(int c) 将小写字母转换为大写字母,如果是字母的话,不是的话,保留(不修改)。
注意在Java当中的 格式System.out.printf()的格式输出,在Java当中只有 %d(数值类型), %f(浮点数类型),没有 %ld,%lf的类型格式。或者是使用 String.
最后:
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,江湖再见,后会有期 !!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83010.html