C/C++入门OJ题(计算机考研复习)

本文介绍了6个C语言编程练习题目,涉及对称数判定、阶乘计算、换零钱问题、统计2的出现次数、字符串逆转比较和内存申请,展示了基础算法及字符串处理技巧。
摘要由CSDN通过智能技术生成

目录

1、对称数的判定

输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

2、求阶乘

利用while或者for循环计算n!的值。

3、换零钱

某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

4、统计2出现的次数

输入N个数(N小于等于100),输出数字2的出现次数;

5、字符串逆转并比较大小

读取一个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出0,原字符串小于逆转后字符串输出-1,大于逆转后字符串输出1。例如输入 hello,逆转后的字符串为 olleh,因为hello 小于 olleh,所以输出-1

6、申请内存

         输入一个整型数,然后申请对应大小空间内存,然后读取一个字符串(测试用例的字符串中含有空格),字符串的输入长度小于最初输入的整型数大小,最后输出输入的字符串即可(无需考虑输入的字符串过长,超过了内存大小);


1、对称数的判定

Description

输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

Input

一个整型数

Output

输出是yes,或者no

Sample Input 1 

12321

Sample Output 1

yes

Sample Input 2 

1231

Sample Output 2

no

Solution

#include<stdio.h>

//对称数,即正着看,反着看都是同一个数
//所以先备份一下原来的数,然后将原来的数从后往前存入一个变量中
//判断这两个数是否一致
int main()
{
    int a=0;
    int b=0;
    int backup_a=0;
    scanf("%d",&a);
    backup_a=a;
    while(a)
    {
        b=b*10+a%10;
        a/=10;
        //a%10得到最后一位数,a再/10再%10,得到倒数第二位数,以此类推
    }
    if(backup_a==b)
    {
        printf("yes");
    }else{
        printf("no");
    }
    return 0;
}

2、求阶乘

Description

利用while或者for循环计算n!的值。

提示:n!=1*2*3…*n

Input

一个正整数n,1≤n≤10。

Output

n!的值。

Sample Input 1 

2

Sample Output 1

2

Sample Input 2 

5

Sample Output 2

120

Solution

#include<stdio.h>

int main()
{
    int a=0;
    int total=1;
    int i=0;
    scanf("%d",&a);
    for(i=a;i>0;i--)
    {
        total*=i;
    }
    printf("%d",total);
    return 0;
}

3、换零钱

Description

某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

Input

无输入

Output

一个数,表示共有多少种换法

Sample Input 1 

Sample Output 1

不能告知,因为只有一个数,偷偷告诉你小于100

Solution

#include<stdio.h>

//一共40张,有10元,5元,2元,1元,每个至少一张。组成100元,有几种方法
int main()
{
    int a=0;//10元的张数
    int b=0;//5元的张数
    int c=0;//2元的张数
    int d=0;//1元的张数
    int count=0;//一共有多少个组合
    for(a=1;a<=9;a++)
    {
        for(b=1;b<=17;b++)
        {
            for(c=1;c<=42;c++)
            {
                for(d=1;d<=83;d++)
                {
                    if(a*10+b*5+c*2+d==100&&a+b+c+d==40)
                    {
                        count++;
                    }
                }
            }
        }
    }
    printf("%d",count);
    return 0;
}

4、统计2出现的次数

Description

输入N个数(N小于等于100),输出数字2的出现次数;

解题提示:

整型数组读取5个整型数的方法如下:

int a[100];

for(int i=0;i<5;i++)

{

scanf("%d",&a[i]);

}

Input

输入的格式是两行

第一行输入要输的元素个数,比如5

第二行输入  1 2 2 3 2,那么输出结果为3,因为2出现了3次

Output

统计数字2出现的次数

Sample Input 1 

5
1 2 2 3 2

Sample Output 1

3

Solution

#include<stdio.h>


int main()
{
    int n=0;
    scanf("%d",&n);
    int count=0;
    int arr[101];
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<n;i++)
    {
        if(arr[i]==2)
        {
            count++;
        }
    }
    printf("%d",count);

    return 0;
}

5、字符串逆转并比较大小

Description

读取一个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出0,原字符串小于逆转后字符串输出-1,大于逆转后字符串输出1。例如输入 hello,逆转后的字符串为 olleh,因为hello 小于 olleh,所以输出-1

注意最后的判断一定要这么写,因为strcmp标准C中并不是返回-1和1,而是负值和正值

int result = strcmp(c, d);

if (result < 0)

{

printf("%d\n",-1);

}

else if (result > 0)

{

printf("%d\n", 1);

}

else {

printf("%d\n", 0);

}

Input

输入一个字符串,例如 hello,当然输入的字符串也可能是 how are you,含有空格的字符串

Output

输出是一个整型数,如果输入的字符串是hello,那么输出的整型数为-1

Sample Input 1 

hello

Sample Output 1

-1

Sample Input 2 

cba

Sample Output 2

1

Sample Input 3 

aba

Sample Output 3

0

Solution

#include <stdio.h>
#include <string.h>
void reverse(char arr1[],char arr2[],int length)
{
    int i=0;
    for(i=0;i<length;i++)
    {
        arr2[i]=arr1[length-1-i];
    }
    arr2[length]='\0';
}
int main()
{
    char arr1[1000];
    char arr2[1000];
    gets(arr1);
    int len=strlen(arr1);
    reverse(arr1,arr2,len);
    int result=strcmp(arr1,arr2);
    if(result>0)
    {
        printf("1");
    }else if(result<0)
    {
        printf("-1");
    }else
    {
        printf("0");
    }
    return 0;
}

6、申请内存

Description

输入一个整型数,然后申请对应大小空间内存,然后读取一个字符串(测试用例的字符串中含有空格),字符串的输入长度小于最初输入的整型数大小,最后输出输入的字符串即可(无需考虑输入的字符串过长,超过了内存大小);

注意下面问题:

char *p;

scanf("%d",&n);

p=malloc(n);

scanf("%c",&c);//注意在scanf和gets中间使用scanf("%c",&c),去除换行

fgets(p,n,stdin);

注意:OJ不支持fflush(stdin)清空标准输入缓冲区操作。

OJ不支持gets,因为C11标准去掉了,部分学校机试可以用gets,部分不可以,因此建议使用fgets

Input

一个整型数和一个字符串,例如

10

hello

Output

输出输入的字符串,上面输入的是hello,那么输出hello

Sample Input 1 

10
hello

Sample Output 1

hello

Solution

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int size;
    scanf("%d",&size);
    char *p;
    p=(char*)malloc(size);
    char c;
    scanf("%c",&c);
    fgets(p,size,stdin);
    puts(p);
    free(p);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼哥myg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值