编程练习题(C)

第一题

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符


接口说明

/**
 * 反转句子
 * 
 * @param sentence 原句子
 * @return 反转后的句子
 */
public String reverse(String sentence);

输入描述:

将一个英文语句以单词为单位逆序排放。

输出描述:

得到逆序的句子

示例1

输入

I am a boy

输出

boy a am I

代码:

#include<stdio.h>
int main()
{
    char str[1000];
    gets(str);
    int i=strlen(str)-1;
    for(;i>=0;i--)
    {
        if(str[i]==' ')
        {
            for(int j=i+1;str[j]!=' '&&str[j]!='\n'&&str[j]!='\0';j++)
            {
                printf("%c",str[j]);
            }
            printf(" ");
        }
    }
    for(i=0;str[i]!=' '&&str[i]!='\n'&&str[i]!='\0';i++)
    {
        printf("%c",str[i]);
    }
    return 0;
}

第二题

题目描述

给定n个字符串,请对n个字符串按照字典序排列。

输入描述:

输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:

数据输出n行,输出结果为按照字典序排列的字符串。

示例1

输入

9
cap
to
cat
card
two
too
up
boat
boot

输出

boat
boot
cap
card
cat
to
too
two
up

代码:

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    char strarr[n][100];
    char temp[100];
    for(int i=0;i<n;i++)
    {
        scanf("%s",strarr[i]);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(strcmp(strarr[j],strarr[j+1])>0)
            {
                strcpy(temp,strarr[j]);
                strcpy(strarr[j],strarr[j+1]);
                strcpy(strarr[j+1],temp);
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%s\n",strarr[i]);
    }
    return 0;
}

第三题

题目描述

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

输入描述:

 输入一个整数(int类型)

输出描述:

 这个数转换成2进制后,输出1的个数

示例1

输入

5

输出

2

代码:

#include<stdio.h>
int main()
{
    int inp;
    scanf("%d",&inp);
    int num=0;
    while(inp>0)
    {
        int rest=inp%2;
        if(rest==1)
        {
            num++;
        }
        inp=inp/2;
    }
    printf("%d",num);
    return 0;
}

第四题

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组

Return Value

OutputArray    输出处理后的随机整数


注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

样例输入解释:

样例有两组测试

第一组是3个数字,分别是:2,2,1。

第二组是11个数字,分别是:10,20,40,32,67,40,20,89,300,400,15。

输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:

返回多行,处理后的结果

示例1

输入

3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15

输出

1
2
10
15
20
32
40
67
89
300
400

代码:

#include<stdio.h>

int main()
{
    int inter[1001];
    int t;
    while(scanf("%d",&t)!=EOF)
    {
        for(int i=0;i<1001;i++)
            inter[i]=0;
        for(int i=0;i<t;i++)
        {
            int n=0;
            scanf("%d",&n);
            inter[n]=1;
        }
        for(int i=1;i<=1000;i++)
        {
            if(inter[i]==1)
            {
                printf("%d\n",i);
            }
        }
    }
    return 0;
}

第五题

题目描述

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 

输入描述:

连续输入字符串(输入2次,每个字符串长度小于100)

输出描述:

输出到长度为8的新字符串数组

示例1

输入

abc
123456789

输出

abc00000
12345678
90000000

代码:

#include<stdio.h>
#include <string.h>
int main()
{
    char str[100];
    while(scanf("%s",str)!=EOF)
    {
        int len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if((i+1)%8==0)
            {
                printf("%c\n",str[i]);
            }
            else
            {
                printf("%c",str[i]);
            }
        }
        int pud=8-len%8;
        if(pud!=8)
        {
            for(int i=0;i<pud;i++)
            {
                printf("%c",'0');
            }
            printf("\n");
        }
    }
    return 0;
}
发布了118 篇原创文章 · 获赞 63 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42185999/article/details/104402385