C语言-每日刷题练习

这篇具有很好参考价值的文章主要介绍了C语言-每日刷题练习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[蓝桥杯 2013 省 B] 翻硬币

 C语言-每日刷题练习,c语言,开发语言,算法

题目背景

小明正在玩一个“翻硬币”的游戏。

题目描述

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

输入格式

两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于 1000。

数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。

输出格式

一个整数,表示最小操作步数。

输入输出样例

输入输出样例

输入 #1

**********
o****o****

输出 #1

5

 输入 #2

*o**o***o***
*o***o**o***

 输出 #2

1
#include<stdio.h>
#include<string.h>
#include <assert.h>
int main()
{
	char arr[1000] = { 0 }, str[1000] = { 0 }, count = 0;
	scanf("%s%s", &arr, &str);
	assert(strlen(arr)== strlen(str));//断言-判断两个字符串长度是否相等
	int rs = strlen(arr);
	int i = 0;
	while (i < rs)//遍历找不同
	{
		if (arr[i] != str[i])
		{
			arr[i] = (arr[i] == '*' ? 'o' : '*');
			arr[i + 1] = (arr[i + 1] == '*' ? 'o' : '*');
			count++;
		}
		i++;
	}
	printf("%d", count);
	return 0;
}

 [NOIP2006 普及组] 明明的随机数

C语言-每日刷题练习,c语言,开发语言,算法

题目描述

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

输入格式

输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例

输入 #1

10
20 40 32 67 40 20 89 300 400 15

输出 #1

8
15 20 32 40 67 89 300 400
#include<stdio.h>
int main()
{
	int n = 0, str[100] = { 0 }, temp = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &str[i]);
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (str[j + 1] < str[j])
			{
				temp = str[j + 1];
				str[j + 1] = str[j];
				str[j] = temp;
			}
		}
	}
	for (int i = 0; i < n - 1; i++)//n-1是为了防止越界
	{
		//把i+1后边的元素往前覆盖
		if (str[i] == str[i + 1])
		{
			for (int k = i; k < n - 1; k++)
			{
				str[k] = str[k + 1];
			}
			n--;
			i--;
		}
	}
	printf("%d\n", n);
	for (int i = 0; i < n; i++)
	{
		printf("%d ", str[i]);
	}
	return 0;
}

P8835 [传智杯 #3 决赛] 子串

C语言-每日刷题练习,c语言,开发语言,算法

题目背景

disangan233 喜欢字符串,于是 disangan333 想让你找一些 disangan233 喜欢的串。

题目描述

在传智的开发课堂上,希望您开发一款文档处理软件。

给定 T 组询问,每次给定 2 个长度为 n,m 的只含英文字母的字符串 a,b,求 a 在 b 中的出现次数,相同字符不区分大小写。注意 a 是 b 中连续子序列。

对于所有数据,T≤100,∑n≤∑m≤10^3。字符串仅由大小或者小写的英文字母组成。

输入格式

输入共 3T+1 行。

第 1 行输入 1 个正整数 T。

接下来共 T 组输入,每组输入共 3 行。

第 1 行输入 2 个正整数 n,m。

第 2 行输入一个长度为 n 的字符串 a。

第 3 行输入一个长度为 m 的字符串 b。

输出格式

输出共 T 行,第 i 行输出 1 个整数,表示询问 i 的答案。

输入输出样例

输入 #1

5
3 10
abc
abcabcabca
2 10
aa
AAaAaaAaAa
5 5
AbCdE
eDcBa
5 5
abcde
ABCDE
3 10
aba
ABaBaAbaBA

输出 #1

3
9
0
1
4

解法一: 

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int  t = 0, n = 0, m = 0, count = 0;//t小组数,n,m字符串的长度,count计数器
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d%d", &n, &m);
		char* a = (char*)malloc( (n+1) * sizeof(char));//开辟数组a的动态内存空间
		                                               //因为数组类型是字符串要留一个字节放斜杆零,防止越界访问
		if (a == NULL)
		{
			return  1;
		}
		scanf("%s", a);
		char* b = (char*)malloc( (m+1) * sizeof(char));//开辟数组b的动态内存空间
		if (b == NULL)
		{
			return 1;
		}
			scanf("%s", b);
			char* ptr = b;//记录b的首地址
		for (int i = 0; i < n; i++)
		{
			*a = tolower(*a);//统一转换为小写
		}
		for (int i = 0; i < m; i++)
		{
			*b = tolower(*b);
		}
		for (int i = 0; i < m; i++)
		{
			if (strncmp( a ,ptr , n) == 0)  //比较前n个字符相同,count++
			{
				count++;
				ptr + n;                    //指向b的指针向前挪动n位比较下一个
			}
			ptr++;
			if (m - i < n)
			{
				break;
			}
		}
		printf("%d", count);
		free(a);                            //释放动态空间
		a = NULL;
		free(b);
		b = NULL;
	}
	return 0;
}

 解法一的运行时间可能会超时,可以试试解法二:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 函数用于计算字符串a在字符串b中的出现次数
int JiShu(char* a, char* b) 
{
    int count = 0;
    int lenA = strlen(a);
    int lenB = strlen(b);
    for (int i = 0; i <= lenB - lenA; i++)
    {
        // 忽略大小写比较
        int flag = 1;
        for (int j = 0; j < lenA; j++) 
        {
            if (tolower(a[j]) != tolower(b[i + j]))
            {
                flag = 0;
                break;
            }
        }
        if (flag) 
        {
            count++;
        }
    }

    return count;
}
int main() 
{
    int t;
    scanf("%d", &t);
    for (int i = 0; i < t; i++)
    {
        int n, m;
        scanf("%d %d", &n, &m);

        char a[1001], b[1001];
        scanf("%s", a);
        scanf("%s", b);

        int rs = JiShu(a, b);
        printf("%d\n", rs);
    }
    return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-751643.html

到了这里,关于C语言-每日刷题练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构算法leetcode刷题练习(1)

    给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标

    2023年04月24日
    浏览(54)
  • 【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】

    目录 猜名次问题 典例题目 题目分析: 代码实现: 运行结果: 猜凶手问题  典例题目 题目分析 代码实现: 运行结果: 猜名次: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二;

    2024年02月07日
    浏览(38)
  • 【算法每日一练]-练习篇 #Tile Pattern #Swapping Puzzle # socks

    目录  今日知识点: 二维前缀和 逆序对 袜子配对(感觉挺难的,又不知道说啥)     Tile Pattern Swapping Puzzle  socks          331 题意:有一个10^9*10^9的方格。W表示白色方格,B表示黑色方格。每个(i,j)方的颜色由(i%n,j%n) 决定。我们给出n*n的字符阵列。进行q此查询。每次输入

    2024年01月20日
    浏览(47)
  • 每日刷题-2

    目录 一、选择题 二、编程题 1、倒置字符串 2、排序子序列 3、字符串中找出连续最长的数字串 4、数组中出现次数超过一半的数字 1、 题目解析: 二维数组初始化的一般形式是: 数据类型 数组名[常量表达式1][常量表达式2] = {初始化数据}; 其中,常量表达式1和常量表达式

    2024年02月09日
    浏览(40)
  • 每日刷题记录(十二)

    描述 Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最

    2023年04月09日
    浏览(34)
  • 每日刷题-5

    目录 一、选择题 二、算法题 1、不要二 2、把字符串转换成整数 1、 解析:printf(格式化串,参数1,参数2,.….),格式化串: printf第一个参数之后的参数要按照什么格式打印,比如 %d---按照整形方式打印,不过格式串有一定规定, %之后跟上特定的字符才代表一定的格式化 。

    2024年02月09日
    浏览(43)
  • 每日刷题_

    347. 前 K 个高频元素 给你一个整数数组  nums  和一个整数  k  ,请你返回其中出现频率前  k  高的元素。你可以按  任意顺序  返回答案。 一共有三种不同的题解: 1、把数据存到哈希表中,然后通过哈希表来排序,时间复杂度n*logn 2、大根堆 k*logn 3、小根堆 k*logn 这里的

    2024年02月06日
    浏览(36)
  • 每日刷题记录(十六)

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶

    2023年04月25日
    浏览(42)
  • 每日刷题记录(十七)

    求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)。 示例 1: 输入: n = 3 输出: 6 示例 2: 输入: n = 9 输出: 45 本题需要用到逻辑运算符的短路性质。以逻辑运算符为例,对于A B这个表达式,如 A表达式返回False ,那么 A B 已经确定

    2023年04月23日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包