得分_UVa1585分子量_UVa1586数数字_UVa1225周期串_UVa455子序列_UVa10340

news2024/12/28 5:11:33

目录

P57_习题3-1_得分_UVa1585

P57_习题3-2_分子量_UVa1586

原子数范围0~99

书上给的代码

P57_习题3-3_数数字_UVa1225

P57_习题3-4_周期串_UVa455

P59_习题3-9_子序列_UVa10340


P57_习题3-1_得分_UVa1585

给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现
的O的个数,X的得分为0。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。

#include<stdio.h>
#define maxn 85
#include<string.h>
char s[maxn];
int value = 0,score = 0;

int main(){
	scanf("%s",s);
	int len = strlen(s);
	for(int m =0 ; m<len;m++){
		if (s[m] == 'O') score+=1;
		else score = 0;
		value += score;
	}
	printf("%d",value);
	return 0;
}

P57_习题3-2_分子量_UVa1586

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分
  别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的
  分子量为94.108g/mol。
  【分析】
  依次扫描即可,注意原子后面不带数目的情况。扫描过程中,维护一个当前已经输入的数字字符
  组成的数字cnt。一开始以及遇到一个新原子时,cnt = -1,表示“还未开始计数”的状态。方便遇
  到原子后不带数目以及数字后有多位的情况处理。
 

原子数范围0~99

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define maxn 20
char s[maxn];
int atomNumber_C = 0,atomNumber_H = 0,atomNumber_O = 0,atomNumber_N = 0;

//只考虑了0~99个原子
int atomNumber(char *s,int i){
	int atomNumber_temp = 0;
	int len = strlen(s);
	if(len-2 >= 0 && i <= len-2 && isdigit(s[i+1])){
		atomNumber_temp = s[i+1] - '0';
		if(len-3 >= 0 && isdigit(s[i+2])){
			atomNumber_temp = atomNumber_temp*10 + s[i+2] - '0'; 
		}
	} else {
		atomNumber_temp = 1;
	}
	return atomNumber_temp;
}

int main(){
	scanf("%s",s);
	int len = strlen(s);
	for(int i = 0;i < len;i++){
		switch (s[i]) {
		case 'C':
			atomNumber_C += atomNumber(s,i);
			//printf("C %d\n",atomNumber_C);
			break;
		case 'H':
			atomNumber_H += atomNumber(s,i);
			//printf("H %d\n",atomNumber_H);
			break;
		case 'O':
			atomNumber_O += atomNumber(s,i);
			//printf("O %d\n",atomNumber_O);
			break;
		case 'N':
			atomNumber_N += atomNumber(s,i);
			//printf("N %d\n",atomNumber_N);
			break;
		}
	}
	printf("%.3fg/mol\n",atomNumber_C*12.01 + atomNumber_H*1.008 + atomNumber_O*16.00 + atomNumber_N*14.01);
	return 0;
}

最开始没有尝试输出每一个原子数量的时候,并没有发现问题

但是输出之后发现是:如果有相同的原子,那么重复调用函数的话,会覆盖式的更改原子数

其实是这里的问题

只需改成

最开始的时候我也想过用四个数组接收原子数目,然后为每一个原子创建一个数组的计数变量,在main函数中还要记录每一个原子是否出现过

书上给的代码

   

【分析】
  依次扫描即可,注意原子后面不带数目的情况。扫描过程中,维护一个当前已经输入的数字字符
  组成的数字cnt。一开始以及遇到一个新原子时,cnt = -1,表示“还未开始计数”的状态。方便遇
  到原子后不带数目以及数字后有多位的情况处理。

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<assert.h>//如果它的条件返回错误,则终止程序执行
#define _for(i,a,b) for(int i = (a);i < (b);++i)
#define _rep(i,a,b) for(int i = (a);i <= (b);++i)
int main(){
	int T,cnt,sz;
	double W[256],ans;
	char buf[256],c,s;
	W['C'] = 12.01,W['H'] = 1.008,W['O'] = 16.0,W['H'] = 14.01;
	scanf("%d",&T);
	while(T--){
		scanf("%s",buf);
		ans = 0;
		s = 0;
		cnt = -1;
		sz = strlen(buf);
		_for(i,0,sz){
			char c = buf[i];
			if(isupper(c)){
				if(i){
					if(cnt == -1) cnt = 1;
					ans += W[s] * cnt;
				}
				s = c;
				cnt = -1;
			} else {
				assert(isdigit(c));
				if(cnt == -1) cnt = 0;
				cnt = cnt*10 + c - '0';
			}
		}
		if(cnt == -1) cnt = 1;
		ans += W[s] * cnt;
		printf("%.3f\n",ans);
	}
	return 0;
}

P57_习题3-3_数数字_UVa1225

把前n(n≤10000)个整数顺次写在一起:123456789101112…数一数0~9各出现多少次(输出10个整数,分别是0,1,…,9出现的次数)。

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define _for(i,a,b) for(int i = (a);i < (b);++i)
#define _rep(i,a,b) for(int i = (a);i <= (b);++i)
int result[11] = {0};
int main(){
	int n = 11;
	_rep(i,0,n){
		if(i == 10000){
			++result[1];
			result[0] += 4;
		}
		else if(i >= 0 && i <= 9){
			++result[i];
		}
		else if(i > 9 && i <= 99){
			++result[i/10];
			++result[i%10];
		}
		else if(i > 99 && i <= 999){
			++result[i/100];
			++result[i%100/10];
			++result[i%100];
		}
		else if(i > 999 && i <= 9999){
			++result[i/1000];
			++result[i%1000/100];
			++result[i%1000%100/10];
			++result[i%1000];
		}
	}
	_for(i,0,10){
		printf("%d: %d\n",i,result[i]);
	}
	return 0;
}

将for循环宏定义,用时比较法便

利用result[]数组,记录相应数字出现的次数

P57_习题3-4_周期串_UVa455

如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。
  例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
  输入一个长度不超过80的字符串,输出其最小周期。
  
  【分析】
  字符串的周期p只可能是闭区间[1,k]内被k整除的数,然后从小到大遍历所有的p,
  判断对于每个i = 0~k-1是否符合line[i] = line[i%C]

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define _for(i,a,b) for(int i = (a);i < (b);++i)
#define _rep(i,a,b) for(int i = (a);i <= (b);++i)
int main(){
	int N;
	scanf("%d",&N);
	char line[256];
	bool first = true;
	while(N--){
		if(first) first = false;
		else puts("");
		scanf("%s",line);
		int sz = strlen(line);
		_rep(p,1,sz){
			if(sz % p) continue;//sz必然是最小周期的整数倍
			bool ans = true;
			_for(i,0,p){
				for(int j = i+p;j < sz;j += p){
					if(line[j] != line[i]) {
						ans = false;
						break;
					}
				}
			}
			if(ans) {
				printf("%d\n",p);
				break;
			}
		}
	}
	return 0;
}

P59_习题3-9_子序列_UVa10340

输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。

#include<stdio.h>
#include<string.h>
const int LEN = 100024;
char s[LEN],t[LEN];
int main(){
	while(scanf("%s%s",s,t) == 2){
		int sLen = strlen(s),tLen = strlen(t);
		bool ok = true;
		for(int i = 0,j = 0;i < sLen;i++,j++){
			while(j < tLen && t[j] != s[i]) j++;
			if(j == tLen){
				ok = false;
				break;
			}
		}
		printf("%s\n",ok ? "Yes" : "No");
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络原理2 TCP协议

TCP协议 文章目录TCP协议TCP的特点TCP的基本特性确认应答机制超时重传机制丢包连接管理机制TCP建立连接---三次握手TCP断开连接---四次挥手滑动窗口机制丢包问题流量控制机制拥塞控制机制延迟应答机制捎带应答机制面向字节流问题TCP中的异常处理程序崩溃了正常关机突然断电关机…

在前端解决跨域

1、环境依赖 C:\Users\cyberzhaohyvm>node -v v14.17.3 C:\Users\cyberzhaohyvm>vue -V vue/cli 5.0.4 2、在项目所在目录&#xff0c;安装axios 进入项目所在目录&#xff1a; D:\01sourcecode\10Tutorial\08Vue\17-2022-12-28-v2\elementui-demo npm install axios …

Redis单线程为什么这么快?

Redis单线程为什么这么快&#xff1f; 第一章 Redis单线程为什么这么快 Redis深度剖析【第一章】Redis单线程为什么这么快&#xff1f;前言一、Redis为什么要使用单线程&#xff0c;而不是多线程&#xff1f;单线程的优势如果Redis使用多线程&#xff1a;既然多线程切换存在消…

【博学谷学习记录】大数据课程-学习第一周总结

Linux服务器 对于Linux操作系统来说&#xff0c;其本身是一个整体&#xff0c;包括Linux内核、系统库和系统程序&#xff0c;Linux内核是其最基础的部分&#xff0c;它实现了对硬件资源的管理&#xff0c;并且提供了使用这些硬件资源的通用接口。 自1991年发布Linux内核来&…

项目实战之旅游网(十四)项目部署-Docker

为了节约资源&#xff0c;在生产环境中我们更多的是使用Docker容器部署SpringBoot应用&#xff0c; 我们要用maven里的docker插件来生成镜像并且远程连接Docker&#xff0c; 开启远程docker服务&#xff1a; # 修改docker配置文件 vim /lib/systemd/system/docker.service 把…

简阅人体姿态估计深度学习方法-simpread-Human Pose Estimation Deep Learning Approach

What is Human Pose Estimation? Human Pose Estimation (HPE) is a way of identifying and classifying the joints in the human body Human Pose Estimation(HPR 人体姿态估计)是一个对人体关节进行识别和分类的方法。 Essentially it is a way to capture a set of co…

Good Bye 2022: 2023 is NEAR C. Koxia and Number Theory

原题链接&#xff1a;Problem - C - Codeforces 题意&#xff1a; 给定一个长度为n的数组&#xff0c;请问是否存在一个数 x &#xff0c;使得任意两个数 与满足 。若是输出 YES &#xff0c;反之输出 NO 。 思路&#xff1a; 我们可以发现一个规律&#xff1a; 规律&#…

本周大新闻|沙特PIF再投Magic Leap,周融资超5.1亿美元

本周大新闻&#xff0c;AR方面&#xff0c;OVER推出众包AR地图Map2Earn&#xff1b;AR房产平台homeAR推扫码看房功能&#xff1b;苹果智能指环专利公布&#xff0c;支持手势和触觉反馈。 VR方面&#xff0c;奇遇MIX正式发布&#xff1b;AjnaLens将发布新XR头显&#xff1b;Gen…

Cartesi 2022 年 12 月回顾

查看你不想错过的更新2022 年 12 月 31 日 &#xff0c;我们将继续保持高昂的建设斗志一直持续到2023年。我们在2022年年底前参加了两次编程马拉松&#xff0c; 并不是一次。我们将 Cartesi 的技术带给了ETH India 活动的2000 多名建设者&#xff0c;我们还与 SuperwomenDAO 合…

RabbitMQ消息确认

目录 1. 消息确认作用 2 开发示例 2.1 生产者确认 2.2 消费者确认 1. 消息确认作用 保证消息的可靠性主要依靠三种机制&#xff1a;一个是消息的持久化&#xff0c;一个是事务机制&#xff0c;一个就是消息的确认机制。 1&#xff09;消息持久化 消息持久化是将消息写入…

卷径计算详解(卷径通过卷绕的膜长和膜厚进行计算)

有关卷绕+张力控制可以参看专栏的系列文章,文章链接如下: 变频器简单张力控制(线缆收放卷应用)_RXXW_Dor的博客-CSDN博客_收放卷应用张力控制的开闭环算法,可以查看专栏的其它文章,链接地址如下:PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博客。https://blo…

双向链表的双向冒泡排序、红白蓝砾石排序、算法设计4-5

&#xff08;PS&#xff1a;直接拿的友友zy的&#xff09; 一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.1 Last edited: 2023.1.1 目录 &#xff08;PS&#xff1a;直接拿的友友zy的…

添加USB wifi驱动到RK3568

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、USB接口的wifi芯片二、使用步骤wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植WIFI 联网测试总结前言 在日常开…

CTF-Web渗透(入门|笔记|工具)

php各种漏洞绕过 传送门&#xff1a;https://cloud.tencent.com/developer/article/2127498 php伪协议 详细博客讲解&#xff1a; https://blog.csdn.net/cosmoslin/article/details/120695429 http://hummer.vin/2022/05/10/PHP%E4%BC%AA%E5%8D%8F%E8%AE%AE/ https://ww…

Codeforces Round #833 (Div. 2)

题目链接 A. The Ultimate Square 题意&#xff1a; 给你一个n&#xff0c;表示有n块砖&#xff0c;第i块砖是1*(i/2)&#xff0c;这里是上取整&#xff0c;问你最大能组合成的正方形的边长是多少 思路&#xff1a; 观察样例就会发现是n/2上取整&#xff0c;下面看代码&…

快速了解网络原理

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 局域网和广域网 局域网 局域网组建的方式 广域网 网络通信基础 IP地址 端口号 协议 什么是协议 协议分层 分层模型 OSI七层模型 TCP/IP…

Python解题 - CSDN周赛第18期 - 又见背包

卧床一周&#xff0c;一觉醒来&#xff0c;恍如隔世&#xff0c;做什么事都提不起兴趣&#xff0c;也不知道这算不算后遗症。 本期的题目还是比较简单的&#xff0c;也有几道做过的题。最后一道照搬过来的背包题也是比较经典的01背包了&#xff0c;整体感觉没有什么值得说的&am…

linux常用命令(四)- 文件备份解压缩

查看压缩文件信息 - zipinfo zipinfo命令用于列出压缩文件信息。 语法 zipinfo [-12hsvz][压缩文件]-1 只列出文件名称。-2 此参数的效果和指定"-1"参数类似&#xff0c;但可搭配"-h",“-t"和”-z"参数使用。-h 只列出压缩文件的文件名称。-s…

c++11 标准模板(STL)(std::deque)(四)

定义于头文件 <deque> std::deque 元素访问 访问指定的元素&#xff0c;同时进行越界检查 std::deque<T,Allocator>::at reference at( size_type pos ); const_reference at( size_type pos ) const; 返回位于指定位置 pos 的元素的引用&#xff0c;有边…

如何在PVE(Proxmox)中安装OpenWrt软路由?

出处&#xff1a; https://www.928wang.cn/archives/1763.html https://blog.itwk.cc/post/pve_install_openwrt.html 工具准备 WinSCP或者XFTPOpenWrt镜像(自行寻找)安装好PVE的主机一台 安装教程 镜像上传 将下载好的OpenWrt img镜像上传到 PVE主机中(这里使用XFTP工具) 选…