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;
}
谢谢大家的阅读,我是一代,我们下篇博客见。