130道基础OJ编程题之: 39 ~ 46 道

导读:本篇文章讲解 130道基础OJ编程题之: 39 ~ 46 道,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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 完美成绩

完美成绩_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述


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 及格分数

及格分数_牛客题霸_牛客网 (nowcoder.com)

在这里插入图片描述

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 最高分数

最高分数_牛客题霸_牛客网 (nowcoder.com)
在这里插入图片描述


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);
            }
        }
    }
}

总结:

  1. 理解C语言中的~scanf("%d",&x)scanf("%d",&x) != EOF 的相似之处,EOF 是 -1,~-1 对负1 取反后为 0 (假)。

  2. 注意使用C语言和Java语言的多组数据的输入 while(scanf()!=EOF) ;java: while(Scanner.hasNext())字符/ while(Scanner.hasNextInt())数值类型的多组输入内容。

  3. 注意在C语言中题目可以存在多余的空格的输入,我们会读取到这个没有的空格,导致这个空格替换掉了我们真正想要读取的内容。所以我们需要多读取一次去掉这个空格,防止影响后面的判断,方法一: getchar();方法二: scanf(“%d\n”,&x) 通过对输入时多加一个 \n ,同样可以达到读取到无用多余的空格问题。Java当中的 next() 时不会读取空格了,所以不要处理空格。

  4. C语言中计算数组大小的方法:sizeof(数组的首地址)/sizeof(数组元素类型)

  5. const char * strchr(const char * str, int character) 判断指定的字符在数组当中的下标位置,注意该下标的起始位置时从 1 开始的,并不是 0 开始的,这一点。

  6. const char * strchr ( const char * str, int character );`判断指定的字符在数组中的下标位置,从该下标位置从 1 开始,不是 0 注意了。

  7. public boolean equalsIgnoreCase(String anotherString) 比较两个字符串的内容是否相等,该方法不区分字符的大小写,而 public boolean equals(Object anObject) 方法同样时比较两个字符串的内容是否相等,注意: 该方法区分字符串内容的大小写的。

  8. C语言:int isalpha (char c) 判断字符是否是 字母 , 是返回 1 true ,不是返回 0 false

  9. 在Java当中是没有 char 的方法输入的,所以我们需要将 char c = scanner.next().charAt(0);语句的意思是使用Scanner.next()从显示/键盘中读取到字符串,再通过将String.charAt(0) 获取到字符串下标为 0 的字符内容,赋值到 char 字符类型,注意获取到的本身就是字符类型。

  10. Java当中的Character类中的方法,Character是在java.lang.Object包下的所以不需要导入包,便可以直接使用的。Character.isLetter(char c ) 该方法表示判断参数,字符是否是 字母 。是返回 true,不是返回 false;

  11. C语言中: int toupper(int c) 将大写字母转换为小写字母,如果是字母的话,不是的话,保留(不修改),int tolower(int c) 将小写字母转换为大写字母,如果是字母的话,不是的话,保留(不修改)。

  12. 注意在Java当中的 格式System.out.printf()的格式输出,在Java当中只有 %d(数值类型), %f(浮点数类型),没有 %ld,%lf的类型格式。或者是使用 String.


最后:

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,江湖再见,后会有期 !!!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83010.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!