从零单排PAT1023,1024

1023.组个最小数  题目要求:

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558
解题思路:这道题目只需要直接将数据存储下来,然后从小到大进行排序,然后进行判断,是否第一个为0,如果为0则与第二小的数进行交换
源代码如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
void swap(char *a,char *b)
{
	char temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
	vector<int> a;
	for(int i=0;i<10;i++)
	{
		int temp;
		cin >> temp;
		a.push_back(temp);
	}
	string b;
	for(int i=0;i<10;i++)
	{
		char temp = i + '0';
		b = b.append(a[i],temp);
	}
	//cout << a.size();
	if(b[0] == '0')  //第一个为0时,直接寻找,用最近的一个数与之交换
	{
		int i = 0;
		while(b[i] == '0')
		{
			i++;
		}
		swap(b[0],b[i]);
	}
	cout << b << endl;
	system("pause");
	return 0;
}

1024.科学计算法  题目要求:

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入格式:

每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。

输入样例1:

+1.23400E-03

输出样例1:

0.00123400

输入样例2:

-1.2E+10

输出样例2:

-12000000000
解题思路:这道题目看似比较复杂,需要用到正则表达式的。但实际上只是一个简单的解析表达式过程,可以将表达式分成4个部分,第一部分数字正负,第二部分实际数据,第三部分表示是乘以10还是除以10,最后是0的位数。所以分成四部分来解,最后拼凑就是两种情况,一种是小数点往后移动(第三部分为正),另一种是小数点往前移动(第三部分为负),接着需要判断在前面添0还是在后面添0:一共有N位有效位数,10的位数为M,若第三部分为正,取正常的是否添0取决于M-N;若为负,直接在前面添0。最后再进行小数点的添加。
源代码如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
	string A;
	cin >> A;
	char fuhao1 = A[0];//记录第一个符号
	string B = "";
	vector<char> b; //用于存储实际有效的位数
	char temp = 0;
	int flag = 0;
	int lenth = A.size();
	for(int i=1;i<lenth;i++)
	{
		if(A[i] != '.')
		{
			if(A[i+1] == 'E')
			{
				flag = i+2;
				b.push_back(A[i]);
				break;
			}
			else
				b.push_back(A[i]);
		}
	}
	char fuhao2 = A[flag]; //记录第二个符号
	int weishu = 0;
	for(int i=flag+1;i<lenth;i++)
	{
		weishu = weishu*10 + (A[i]-'0');
	}
	/*****************完成解析**************/
	int temp1 = weishu - b.size() + 1;
	if(fuhao2 == '+') //为正的情况下
	{
		if(temp1 >= 0)//不需要添加小数点
		{
			for(int i=0;i<b.size();i++)
			{
				B.append(1,b[i]);//原来参数写错了
			}
			B.append(temp1,'0');
		}
		else
		{
			for(int i=0;i<b.size();i++)
			{
				B.append(1,b[i]);
				if(i == weishu)
					B.append(1,'.');
			}
		}
	}
	else //位数为负的情况下
	{
		if(weishu > 0)
		{
			B.append(1,'0');
			B.append(1,'.');
			B.append(weishu - 1,'0');
			for(int i=0;i<b.size();i++)
			{
				B.append(1,b[i]);//原来参数写错了
			}
		}
		else  //为0时候,直接输出
		{
			B.append(1,b[0]);
			B.append(1,'.');
			for(int i=1;i<b.size();i++)
			{
				B.append(1,b[i]);//原来参数写错了
			}
		}
	}
	if(fuhao1 == '+')
		cout << B << endl; //不需要直接输出的负号
	else
		cout << fuhao1 << B << endl;//负数,需要输出负号
	system("pause");
 	return 0;
}



从零单排PAT1023,1024

时间: 2024-09-30 20:50:24

从零单排PAT1023,1024的相关文章

PAT从零单排

偶然原因开始了PAT之旅前前后后用了3天时间刷完了PAT Basic(35题) 现在记录下从零单排的过程,总的来说题目很简单 当然有个别题目的坑点还是比较给力的,准确的说,题目的数据很给力 1001. 害死人不偿命的(3n+1)猜想 (15) 纯模拟题,是偶数除以2,奇数(3n+1)除以2,到1结束 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,

从零单排之玩转Python安全编程(II)

转自:http://www.secpulse.com/archives/35893.html 都说Python大法好,作为一名合格的安全从业人员,不会几门脚本语言都不好意思说自己是从事安全行业的. 而Python是最容易入门且使用最顺手的脚本语言,为了不引起程序员世界大战,我们不说Python是世界上最好的语言,没有之一. 这是<从零单排之玩转Python安全编程>的第二篇.第一篇参见安全脉搏<从零单排之玩转Python安全编程(I)> 本教程继续展示一些基本的Python脚本概念

(4)风色从零单排《C++ Primer》 变量,引用,指针

从零单排<C++ Primer> --(4)变量,引用,指针   变量的初始化 所谓变量的初始化,指在创建变量的同时给予值. 初始化方法: int units_sold = 0; int units_sold = {0}; int units_sold{0}; int units_sold{0}; long double ld = 3.1415926536: int a{ld}, b = {ld}; //error:narrowing conversion required int c(ld)

【Android的从零单排开发日记】之入门篇(七)——Android数据存储(上)

在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也是开发平台必须提供的基础功能.不光是在Android平台上,在其他的平台上,数据的存储永远是不可缺少的一块.Android的数据存储是构建在Linux的文件系统上,它充分利用Linux的账号系统来限定应用对数据的访问,部署了一套安全和灵活并重的数据存储解决方案.Android的文件框架,以及各种数据

Unity3D游戏开发从零单排(六) - 人物运动及攻击连击

提要 今天要实现的是一个简单人物控制器.包括用w,a,s,d来控制人物上下左右跑动,鼠标左击发出连招,都是基于老的lagacy的动画.虽然unity3d自带有charactorcontroller,但是并不是很好用,所以人物控制相关的全部自己来实现.先上效果图: 场景搭建 首先下载这个package,里面包含了人物的动作还有地面的模型.将人物和地面都拖进场景中.这里的模型默认的动画模式是lagacy,不用修改.模型有点偏小,改变模型的scale值为10.最好不要改源文件的scale的scale

PHP从零单排(十八)图片处理

1.打开已经存在的图片 <?php header("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jpg"); imagejpeg($img); imagedestroy($img); ?> 函数imagecreatefromjpeg()的参数即文件所在路径,返回值是参数所指图片的资源标识符.该函数时通过已有图像新建一个图像,并不是单纯打开原图像本身.如果将图片的后缀名.jpg强制改为.p

从零单排入门机器学习:Octave/matlab的常用知识之矩阵和向量

Octave/matlab的常用知识之矩阵和向量 之前一段时间在coursera看了Andrew ng的机器学习的课程,感觉还不错,算是入门了.这次打算以该课程的作业为主线,对机器学习基本知识做一下总结.小弟才学疏浅,如有错误,敬请指导. Andrew的课程选了Octave/matlab为编程语言.他选择这个估计更多是考虑大众性,这门语言容易入门. 然后我觉得学会使用Octave/matlab还是挺有用的.一来是她天生是个数学工具,开始的研究阶段使用她最方便莫属,注意我这里所说的是研究阶段,商用

Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D

游戏动画基础 Animation组件 Animation组件是对于老的动画系统来说的. 老的动画形同对应的动画就是clip,每个运动都是一段单独的动画,使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画. animation.Play("name"); animation.CrossFade("name"); 下面的是它的几个属性 Animation:默认的动画片段: Aniamtions:包含的动画片段: Play Automaticall

php从零单排-00

php是什么? php是一种服务器端的语言,用来产生动态网页 我为什么要学习php? 作为半路出家程序员,对web的了解几乎为零,php简单易学,资料齐全,能够减轻web学习的畏惧感. web的外延很广,可以接触到更多的领域,能拓展视野,并帮助自己找到自己喜爱并擅长的领域. 能做点小项目,锻炼之余挣点外块,补充一下自己的钱包. 准备怎样学习php?. php100的新版教程,w3schools,php官网 学而不思则罔,思而不学则殆:一边学,一边做总结: 光说不练假把式,光练不说傻把式:一边学,