ACM实训冲刺第一天

目录

ACM实训课程考核

考核内容

备赛安排

推荐学习资源

ACM实训准备规划

前话

历届习题(未曾改变)

第0套

第1套

第2套

第3套

第4套

规划

5.8 - 5.12 (11周)

5.13-5.19(12周)

5.20-5.26(13周)

5.27-6.2(14周)

 5.8 学习

基础回顾:基本语法

1.输入输出

2.基本运算

 3.循环语句

4. 分支和条件

 5.函数

 6.数组

第0套题详解(SUM Problem 、 A+B problem)

SUM Problem

问题

思路

代码 

 A+B problem

问题

思路

代码


ACM实训课程考核

考核内容

项目参照ACM-ICPC竞赛的评价规则进行考核,即学生在指定地点和规定时间内完成给出的程序设计题目,并按照最终通过的题目数量及时间进行等级评分。

备赛安排

1)预备阶段 了解ACM程序设计竞赛的基本流程,掌握并参与ACM程序设计竞赛的基本步骤。(VJudge) 第11周完成。

2)练习阶段 总结相关算法知识,并进一步学习及强化。(自习)

练习一定数量的ACM程序设计竞赛题目。(VJudge)

每周1次练习赛(周日晚7:00-9:00)。(VJudge) 第11-14周完成。

3)考核阶段 现场比赛(STU OJ) 第15周完成。

推荐学习资源

视频资源1: 蓝桥杯ACM算法竞赛辅导 https://www.bilibili.com/video/BV174411D7SK

视频资源2 算法讲堂(电子科技大学) https://space.bilibili.com/7711573/channel/seriesdetail?sid=1071937


ACM实训准备规划

前话

本人对算法一窍不通,虽苦苦挣扎3年,但还是始终处于小白的感觉,故本系列仅为我顺利通过ACM实训课程备考和复习服务,仅供大家参考即可

历届习题(未曾改变)

第0套

第1套

第2套

Anton and Danik、人见人爱A^B、Tokitsukaze and All Zero Sequence、Aggressive cows、Brainman、Tokitsukaze and Good 01-String (hard version)

第3套

统计元音、Let the Balloon Rise、Election Time、0-1 Knapsack Problem、Drying、N皇后问题

第4套

Digit Counting、Add All、Oil Deposits、Dungeon Master、Is It A Tree?、Global Raining at Bididibus

规划

5.8 - 5.12 (11周)

  1. 掌握第0套和第1套的习题
  2. 在5.12之前熟练理解并会编写上述习题,理清思路
  3. 看ACM社团录制视频基础部分,进行回顾
  4. 完成蓝桥杯ACM算法竞赛辅导1-2讲视频,将其java转为c语言
  5. 进行必要的算法练习,举一反三

5.13-5.19(12周)

  1. 复习第0套和第1套的习题,以及上周所掌握的知识
  2. 掌握第2套的习题
  3. 在5.19之前熟练理解并会编写上述习题,理清思路
  4. 看ACM社团录制视频基础部分,进行回顾
  5. 完成蓝桥杯ACM算法竞赛辅导3-5讲视频,将其java转为c语言
  6. 进行必要的算法练习,举一反三

5.20-5.26(13周)

  1. 复习第1套和第2套的习题,以及上周所掌握的知识
  2. 掌握第3套的习题
  3. 在5.26之前熟练理解并会编写上述习题,理清思路
  4. 看ACM社团录制视频基础部分,进行回顾
  5. 完成蓝桥杯ACM算法竞赛辅导6-7讲视频,将其java转为c语言
  6. 进行必要的算法练习,举一反三

5.27-6.2(14周)

  1. 进入复习阶段,对前3周所学内容进行差缺补漏
  2. 掌握第4套的习题
  3. 在6.2之前熟练理解并会编写上述习题,理清思路
  4. 看ACM社团录制视频基础部分,进行回顾
  5. 观看算法讲堂
  6. 进行必要的算法练习,举一反三

 5.8 学习

【碎碎念】今天学习任务量较为轻松,明天可能会需要开始做项目,故今天学习多一些。。。

基础回顾:基本语法

1.输入输出

#include<stdio.h>
 int main(){
    // 将数字字符转为数字
    char c;
    scanf("%c",&c);
    scanf("%d",c-'0');
    return 0;
}
  1. 所有变量都要先声明再使用,声明的时候注意命名规范
  2. main函数忘记加返回值
  3. 记得加分号
  4. 区分中英文标点

2.基本运算

++a 相当于 a=a+1

 逻辑运算符(用在条件上面)

 类型转换 

#include <stdio.h>
int main( ){
    //数字反转
    char a,b,c,d;
    scanf("%c%c%c.%c",&a,&b,&c,&d);
    printf("%c.%c%c%c",d,c,b,a);
    return 0;
}

 3.循环语句

#include<stdio.h>
int main(){
    //循环 一尺之锤
    int a, day=1;
    scanf("%d",&a);
    while(a>1){
        a = a/2;
        day = day +1;//天数加一
    }
    printf("%d",day);
    return 0;
}
#include<stdio.h>
int main(){
    //寻找最小值
    int n , min =1000;
    scanf("%d",&n);
    for(int i=1 ; i<=n ; i++){
        int tmp;
        scanf("%d",&tmp);
        if(tmp < min) min = tmp ;
    }
    printf("%d",min);
    return 0 ;
}

    

4. 分支和条件

闰年的判断

#include<stdio.h>
int main(){
    int year;
    //输入year
    scanf("%d",&year);
    //判断能否被4整除
    if (year % 4 == 0){

        //判断能否被400整除
        if (year % 100 != 0 ){
            printf("1");
        }
        else if(year % 400 == 0 ){
            printf("1");
        }else{
            printf("0");
        }

    }else{
        printf("0");
    }
    return 0;
}

 5.函数

#include<stdio.h>

//函数事先要声明
int add(int a,int b)

int main(){

    int m = 2, n = 7;
    int res = add(m,n);
    return 0;
}

int add(int a, int b){
    return a+b;
}

 6.数组

 

第0套题详解(SUM Problem 、 A+B problem)

SUM Problem

问题

在这个问题中,你的任务是计算SUM(n) = 1 + 2 + 3 +…+ n。
输入
输入将由一系列整数n组成,每行一个整数。
输出
对于每种情况,在一行中输出SUM(n),后面跟着一个空行。您可以假设结果将在32位有符号整数的范围内。

思路

每输入一个数,输出当前已经输入的所有数据的和。需要注意判断是否读到结尾

代码 
#include<stdio.h>
int main(){
    //声明变量   
    int n,sum;
    //循环输入
    while(scanf("%d",&n)!=EOF){

        if(n%2==0)
            sum=n/2*(n+1);
         else
            sum=(n+1)/2*n;
        printf("%d\n\n",sum);

    }

    return 0;
}
# include<stdio.h>

int main()
{	
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int sum=0;
		for(int i=0;i<=n;i++)
		{
			sum+=i;
		}
	printf("%d\n\n",sum);
	}
	return 0;
}

 A+B problem

问题

我有个很简单的问题要问你。给定两个整数A和B,你的任务是计算A + B的和。
输入
输入的第一行包含一个整数T(1<=T<=20),它表示测试用例的数量。然后是T行,每行由两个正整数A和b组成。注意,整数非常大,这意味着您不应该使用32位整数来处理它们。您可以假设每个整数的长度不超过1000。
输出
对于每个测试用例,您应该输出两行。第一行是“Case #:”,#表示测试用例的编号。第二行是等式“A + B = Sum”,Sum表示A + B的结果。注意,在等式中有一些空格。输出两个测试用例之间的空行。

思路

读取多组输入的大整数(字符串形式),将它们相加,并以大整数的形式输出结果。

  1. 读取测试用例数量:首先读入一个整数T,表示接下来有T组大整数相加的测试用例。

  2. 循环处理每组测试用例:通过一个for循环,迭代处理T组输入。

  3. 读取大整数:对于每组测试,分别读入两个大整数number1number2,存储为字符数组。

  4. 初始化和计算

    • 初始化一个数组sum用于存放两数相加的结果及其进位,长度足够大且预先全部置零。
    • 从最低位(个位)开始,对齐或补零后逐位相加,同时处理进位。这里利用了字符串的逆序遍历,即从末尾向前遍历。
    • 如果当前位的和大于等于10,则产生进位,将该位的值变为余数,并在更高位累加进位的商。
  5. 输出结果

    • 按照指定格式输出每组测试用例的输入大整数和它们的和。
    • 注意最高位可能产生的额外进位。
代码
#include <stdio.h>
#include <string.h>
int main(){
	int T;
	scanf("%d", &T);
	
	int j,k;
	for (j = 1; j <= T; j++){
		char number1[1000];
		char number2[1000];
		int sum[1000] = {0};//置0
		//memset(sum, 0, sizeof(int));//int 类型怎么置0
		scanf("%s%s", number1, number2);
		int len1 = strlen(number1);
		int len2 = strlen(number2);
		int i;
		for (i = 0; i < len1 || i < len2; i++){
			if (i < len1)
				sum[i] += number1[len1 - i - 1] - '0';//字符转换为数字
			if (i < len2)
				sum[i] += number2[len2 - i - 1] - '0';
			if (sum[i] >= 10)
			{
				sum[i + 1] = sum[i] / 10;
				sum[i] = sum[i] % 10;
			}
		}
	
		printf("Case %d:\n", j);//格式输出
		for (k = 0; k<len1; k++)
			printf("%c", number1[k]);
		printf(" ");
		printf("+");
		printf(" ");
		for (k = 0; k<len2; k++)
			printf("%c", number2[k]);
		printf(" ");
		printf("=");
		printf(" ");
		if (len1 < len2)//判断谁最长
			len1 = len2;
		if (sum[i]>0)
			printf("%d", sum[i]);//最高位产生进位
		for (i = len1 - 1; i >= 0; i--)
			printf("%d", sum[i]);
		printf("\n\n");
	}
	return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX 1005
 
int main()
{
    int t,i,j,k,count=1;//count用来记实例序号
    char a[MAX],b[MAX];
    int na[MAX],nb[MAX];//数字数组
    int sum[MAX],pre;//pre表示前一位
    scanf("%d",&t);
    while(t--){
 
        memset(sum,0,sizeof(sum));
        memset(na,0,sizeof(na));
        memset(nb,0,sizeof(nb));
        scanf("%s%s",a,b);
        pre=0;
        int lena = strlen(a);
        int lenb = strlen(b);
        //字符串反转且字符串变数字
        for(i=0;i<lena;i++)
            na[lena-1-i] = a[i]-'0';
        for(j=0;j<lenb;j++)
            nb[lenb-1-j] = b[j]-'0';
        int lenx=lena>lenb?lena:lenb;
        //逐位相加(从最低位开始加)
        for(k=0;k<lenx;k++){
            sum[k]=na[k]+nb[k]+pre/10;
            pre=sum[k];
        }
        while(pre>9){
            sum[lenx]=pre/10%10;//最高位有了进位了
            lenx++;
            pre/=10;
        }
        printf("Case %d:\n",count++);
        printf("%s + %s = ",a,b);
        for(i=lenx-1;i>=0;i--){
            printf("%d",sum[i]%10);//输出每一位 每一位是sum数组中的每一项对10取余
        }
        printf("\n");
        if(t)
            printf("\n");
 
 
    }
 
    return 0;
}


明天学习计划:复习今天所学内容和代码,学习蓝桥杯ACM算法竞赛辅导第一讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/604399.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解放双手,利用自动点赞软件提高曝光度

在数字时代&#xff0c;社交媒体如同一片繁茂的森林&#xff0c;每一条动态、每一张照片都是树上挂着的果实&#xff0c;而点赞则仿佛是那些吸引眼球的色彩。在这个以流量为王的网络世界里&#xff0c;点赞数往往与内容的可见度直接相关&#xff0c;它不仅能够增加帖子的权重&a…

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…

渐进淡出背景个人导航页源码(火影版)

渐进淡出背景个人导航页源码&#xff08;火影版&#xff09; 效果图部分源码领取源码下期更新预报 效果图 部分源码 <!DOCTYPE html> <html> <head> <!--小K网 www.xkwo.com --><meta charset"UTF-8"><title>火影版个人主页<…

如果出现一个工具,可以让前端开发彻底不用再手写UI,这个工具意义大吗?干货!

求这样的一个工具&#xff0c;可以让后端开发、嵌入式开发、产品经理、UI设计师都能用&#xff0c;注意&#xff0c;不是在一个简单的静态页生成&#xff0c;也不是类似飞冰那种 generator &#xff0c;而是真正让设计师和开发者在各自的那侧达成自治&#xff0c;可以做到吗&am…

异构图神经网络——Heterogeneous Graph Neural Networks

相关代码见文末 1.回顾同构图 1.1 GNN GNN基本计算方法——邻接矩阵乘以节点,聚合相邻节点的特征,得到本节点的特征表达 1.2 Graph Attention Network 引入图注意力,实现边的权重可学习,最简单的方法是,将两个节点的特征进行拼接,使用一组可学习的权重参数映射为边的权…

搜狗输入法 PC端 v14.4.0.9307 去广告绿化版.

软件介绍 搜狗拼音输入法作为众多用户计算机配置的必备工具&#xff0c;其功能的全面性已为众所周知&#xff0c;并且以其高效便捷的输入体验受到广大使用者的青睐。然而&#xff0c;该软件在提供便利的同时&#xff0c;其内置的广告元素常常为用户带来一定的干扰。为此&#…

游戏理解入门:Rust+Bracket开发一个小游戏

1. Game loop 使用game loop可以使得游戏运行更加流畅和顺滑&#xff0c;它可以&#xff1a; 初始化窗口、图形和其他资源&#xff1b;每当屏幕刷新他都会运行(通常是每秒30,60 )&#xff1b;每次通过循环&#xff0c;他都会调用游戏的tick()函数。 大致的原理流程如下&…

利用生成式AI重新构想ITSM的未来

对注入 AI 的生成式 ITSM 的需求&#xff0c;在 2023 年 Gartner AI 炒作周期中&#xff0c;生成式 AI 达到预期值达到顶峰后&#xff0c;三分之二的企业已经将生成式 AI 集成到其流程中。 你问为什么这种追求&#xff1f;在预定义算法的驱动下&#xff0c;IT 服务交付和管理中…

又发现一个ai生成音乐的网站-heymusic

网址 https://heymusic.ai/ 尴尬&#xff0c;不挂梯子能登录进来&#xff0c;但是谷歌账号注册不了&#xff0c;刷新了几遍也没注册上。 看了下价格&#xff0c;应该不是免费的&#xff0c;所以也没了试用的兴趣。 我也不想用别的邮箱注册了&#xff0c;所以只能简单的水一…

固定资产管理系统参考论文(论文 + 源码)

【免费】固定资产管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89282536 固定资产管理系统 摘 要 随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求&#xff0c;利用计算机实现设备及资产的信息化管理已经显得非常重要。 固…

IO 5.8日

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 2&#xff1a;判断一个文件是否拥有用户可写…

LeetCode509:斐波那契数(使用动态规划)

题目描述 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n > 1…

BFS专题——FloodFill算法:200.岛屿数量

文章目录 题目描述算法原理代码实现CJava 题目描述 题目链接&#xff1a;200.岛屿数量 PS:注意题目中每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。也就是说斜角是不算了&#xff0c; 例如示例二&#xff0c;是三个岛屿。 算法原理 这道题目是 DFS&#xff0…

三维天地助力实验室质量管理工作无纸化、流程化、标准化

质量管理是实验室日常管理工作中的重点内容,目前大多数实验室信息化的方向还是以实验主流程向无纸化转变为主,质量管理工作仍然依靠线下纸质文件或者线上登记台账的方式进行,这种方式存在任务流转效率低、资源浪费等问题,此外历史数据难以保存也是实验室管理人员的一大痛点。 …

【Android】Room数据库的简单使用方法

Room数据库的使用方法 目录 1、添加Room数据库的依赖2、Entity——定义实体类 2.1 定义主键——PrimaryKey2.2 字段注解——ColumnInfo 3、Dao——定义数据访问对象4、Database——数据库 4.1 通过回调观察数据库是否创建成功 5、使用时注意点6、编写异步 DAO 查询 6.1 写异步…

24_Scala集合Map

文章目录 Scala集合Map1.构建Map2.增删改查3.Map的get操作细节 Scala集合Map –默认immutable –概念和Java一致 1.构建Map –创建kv键值对 && kv键值对的表达 –创建immutable map –创建mutable map //1.1 构建一个kv键值对 val kv "a" -> 1 print…

Java IO流(二)

1. 缓冲流 1.1 字节缓冲流概述 当对文件或其他数据源进行频繁的读/写操作时&#xff0c;效率比较低&#xff0c;这时如果使用缓存流就能够更高效地读/写信息。 比如&#xff0c;可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。 如果用生活中的例子做…

多模态EDA论文小记

论文地址 该论文主要改进点是&#xff1a;通过动态化局部搜索中每个集群大小&#xff0c;高斯和柯西分布共同产生个体。总的来说改进点不多&#xff0c;当然也可能是笔者还没发现。 局部搜索 划分集群 划分集群有两个策略分别是&#xff1a; 随机生成一个点作为中心点&…

什么软件可以把视频合并在一起?6个软件教你快速进行视频编辑

什么软件可以把视频合并在一起&#xff1f;6个软件教你快速进行视频编辑 当你需要对视频进行编辑和合并时&#xff0c;选择合适的软件可以极大地提高工作效率和编辑质量。以下是六款被广泛认可且功能强大的视频编辑软件&#xff0c;它们可以帮助你快速、高效地进行视频编辑和合…

PDF转word转ppt软件

下载地址&#xff1a;PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件&#xff0c;电脑自带的又要开会员啥的很麻烦&#xff0c;现在分享这款软件直接激活就可以免费使用了&#xff0c;超级好用&#xff0c;喜欢的可以下载
最新文章