C语言好题分享

1.第一题 

输入 

 

输出 

示例  AC代码:

#include <stdio.h>
int main() {
    char a;
    int c = 0;
    int ch = 0;
    int chn = 0;
    while (~scanf("%c", &a))
    {
        if (a == 'C')
        {
            c++;
        }
        else if (a == 'H')
        {
            ch += c;//和前面的的‘C’组合成CH
        }
        else if (a == 'N')
        {
            chn += ch;//和前面的'CH'组合成CHN
        }
    }
    printf("%d", chn);
    return 0;
}

2.第二题

解题思路:

这题一般解题思路就是先使用冒泡排序,然后进行去重;代码如下:

#include <stdio.h>
int main() {
    int n = 0;
    scanf("%d", &n);
    int arr[1001] = { 0 };
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //冒泡排序
    for (i = 0; i < n - 1; i++)//n-1趟冒泡排序
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tem = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tem;
            }
        }
    }
    for (i = 0; i < n - 1; i++)
    {
        if (arr[i] == arr[i + 1])
        {
            for (j = i; j < n - 1; j++)
            {
                arr[j] = arr[j + 1];//把i+1项往后的元素往前覆盖
            }
            n--;//i+1项往前覆盖,项数减一
            i--;//防止i变化,因为如果覆盖后,之前后面一项的下标减一
        }
    }
    for (i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

但其实这题有一个优化的解法,其减少了时间的消耗,代码如下:

#include <stdio.h>
int main() {
    int n = 0;
    int m = 0;
    scanf("%d", &n);
    int arr[1001] = { 0 };//全部赋值为0
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &m);
        arr[m] = m;//第m项赋值为m
    }
    for (i = 1; i <= 1000; i++)
    {
        if (arr[i] != 0)
            printf("%d ", arr[i]);
    }
    return 0;
}

3.题目描述
在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。
给定一个字符串s和整数k,将s划分成k个子系列,每个子系列的相邻元素在原来s中的下标差值正好为k。

输入
仅一行, 包含空格分开的字符串s和整数k。字符串s全部由大写字母构成,且长度不超过100.  1 < k <= min(10, strlen(s))

输出
    依次输出s划分成的k个子系列,具体格式见样例

样例输入 Copy
    ABCDEFGH 3
    样例输出 Copy
    ADG
    BEH
    CF

AC代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[100] = { 0 };
	scanf("%s", arr);
	int len = strlen(arr);
	int k = 0;
	scanf("%d", &k);
	int i = 0;
	int count = 0;
	while (count < k)
	{
		for (i = 0 + count; i < len; i += k)
		{
				printf("%c", arr[i]);
		}
		printf("\n");
		count++;
	}
	return 0;
}

谢谢大家的阅读,我是一代,我们下篇博客见。

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值