2.23C语言学习

P1480 A/B Problem

高精度数除以非高精度数

cpp 复制代码
#include<bits/stdc++.h>
long long b[66660],c[66660],sum=0;
char a[66660];
int n;
int main(){
	scanf("%s",a);
	scanf("%d",&n);
	int len=strlen(a);
	for(int i=1;i<=len;i++){
		b[i]=a[i-1]-'0';
	}
	for(int i=1;i<=len;i++){
		c[i]=(b[i]+sum*10)/n;
		sum=(b[i]+sum*10)%n;
	}
	int flag=1;
	while(c[flag]==0&&flag<len)flag++;
	for(int i=flag;i<=len;i++){
		printf("%lld",c[i]);
	}
	return 0;
}

P1109 学生分组

如果总人数在范围内,就不用输出-1

我们先用一个数组存下每个组的初始人数

那么,只有人数小于下限或大于上限才要调整 所有组多出来的人数和所有组缺的人数分别记成x、y x、y中更大的那个调到在范围内的组和范围外的组 所以,输出x、y中多的那个就可以了

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a[60],sum=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		sum+=a[i];
	}
	int left,right,suma=0,sumb=0;
	scanf("%d %d",&left,&right);
	for(int i=1;i<=n;i++){
		if(a[i]<left){
			suma+=left-a[i];
		}
		else if(a[i]>right){
			sumb+=a[i]-right;
		}
	}
	if(sum<n*left||sum>n*right){
		printf("-1");
		return 0;
	}
	int ans=max(suma,sumb);
	printf("%d",ans);
	return 0;
}

P2708 硬币翻转

当这一个硬币与下一个硬币不同时,这一个硬币连同它之前的硬币一起翻转

翻转至与下一个硬币相同的一面

直到将所有硬币翻转到同一面

但这里还有一个点要注意:

题目要求所有硬币正面朝上,也就是所有面都是'1'的情况,才算完成

我们就再把全部硬币翻转一次

那么这道题就好解决了

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	string str;
	cin>>str;
	int cnt=0;
	for(int i=0;i<str.size()-1;i++){
		if(str[i]!=str[i+1])cnt++;
	}
	if(str[str.size()-1]=='0')cnt++;
	printf("%d",cnt);
	return 0;
}

P1421 小玉买文具

水题,会写hello world都会写这个

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x,y;
	cin>>x>>y;
	int sum=x*10+y;
	int nunm=sum/19;
	cout<<nunm;
	return 0;
}

P1060 NOIP2006 普及组 开心的金明

01背包问题,对着模板来就行了

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int w[31],s[31],dp[30009];
int main(){
	int n,m;
	scanf("%d %d",&m,&n);
	for(int i=1;i<=n;i++){
		scanf("%d %d",&w[i],&s[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=w[i];j--){
			dp[j]=max(dp[j],dp[j-w[i]]+w[i]*s[i]);
		}
	}
	cout<<dp[m];
	return 0;
}

B3849 GESP样题 三级 进制转换

经典的精致转换,这里也是把我的板子献上

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a, b, cnt = 0;
	char arr[320] = { 0 };
	scanf("%d %d",&a,&b);
	while (a > 0) {
		int c = a % b;
		if (c > 9) {
			arr[cnt++] = (char)(c + 55);
		}
		else {
			arr[cnt++] = (char)(c + 48);
		}
		a /= b;
	}
	for (int j = cnt - 1; j >= 0; j--){
		cout << arr[j];
	}
	return 0;
}
相关推荐
-cywen-3 分钟前
GROUNDHOG总体版
人工智能·深度学习·算法
_不会dp不改名_6 分钟前
leetcode_1614嵌套括号的最大深度
算法·leetcode·职场和发展
sali-tec6 分钟前
C# 基于OpenCv的视觉工作流-章110-YOLO 实例分割
图像处理·人工智能·opencv·算法·yolo·计算机视觉
kyrie_sakura17 分钟前
大模型学习6 -- 深度学习 1 概述和PyTorch
pytorch·深度学习·学习
sunburn-22 分钟前
Java 排序算法详细教学:从冒泡排序到快速排序
java·开发语言·数据结构·ide·算法
ACP广源盛1392462567329 分钟前
接口适配方案选型|GSV6125@ACP HDMI2.0 转 Type‑C/DP1.4 桥接芯片工程评估
大数据·c语言·开发语言·硬件架构·硬件工程·国产芯片
阳明山水31 分钟前
因果嵌入与流水线范式的本质差异
人工智能·深度学习·算法·机器学习·架构
小静AI工程实验室35 分钟前
MD5 算法详解:哈希原理、标准向量、输入编码与安全边界
算法·安全·哈希算法·md5
小许同学记录成长36 分钟前
几何体编辑算法
qt·算法
传奇开心果编程43 分钟前
【Flutter入门练中学】第3课:滚动与列表
android·学习·flutter·ui·ios