洛谷P1603,P1597

第6章 字符串与文件操作

L P1603 斯诺登的密码

P1603 斯诺登的密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

何为斯诺登事件?

爱德华·斯诺登_百度百科 (baidu.com)

简介:斯诺登事件一般指棱镜门。 棱镜计划(PRISM)是一项由美国国家安全局(NSA)自2007年小布什时期起开始实施的绝密电子监听计划,该计划的正式名号为“US-984XN”。

理解题意

1.输入

输入字符串一列在题中统一为1正规:one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty和非正规:a both another first second third。正规单词意义为1-20,在题中也为其1-20,非正规为冠词a(一),both(both_百度百科 (baidu.com),两个(都);双方(都)),another(一类),其余为1,2,3的序数词,在题中统一为1

2.运算排列

取这些数的的平方mod100(%100)

3.排列

将这些数排列,输出其中最小

因此,可得代码

代码

#include<bits/stdc++.h>
using namespace std;
string f;int a[200],b,l=1;
int main ( )
{
	ios::sync_with_stdio(false);
	while (cin>>f)
	{
		if (f=="one"||f=="a"||f=="both"||f=="another"||f=="first"||f=="second"||f=="third"){b++;a[b]=1;}//1,判1的情况,1*1%100=1
		else if (f=="two"){b++;a[b]=4;}//2,判2,2*2%100=4
		else if (f=="three"){b++;a[b]=9;}//判3,3*3%100=9
		else if (f=="four"){b++;a[b]=16;}//判4,4*4%100=16
		else if (f=="five"){b++;a[b]=25;}//判5,5*5%100=25
		else if (f=="six"){b++;a[b]=36;}//判6,6*6%100=36
		else if (f=="seven"){b++;a[b]=49;}//判7,7*7%100=49
		else if (f=="eight"){b++;a[b]=64;}//判8,8*8%100=64
		else if (f=="nine"){b++;a[b]=81;}//判9,9*9%100=81
		else if (f=="ten"){b++;a[b]=0;}//判10,10*10%100=0
		else if (f=="eleven"){b++;a[b]=21;}//判11,11*11%100=21
		else if (f=="twelve"){b++;a[b]=44;}//判12,12*12%100=44
		else if (f=="thirteen"){b++;a[b]=69;}//判13,13*13%100=69
		else if (f=="fourteen"){b++;a[b]=25;}//判14,14*14%100=25
		else if (f=="fifteen"){b++;a[b]=56;}//判15,15*15%100=56
		else if (f=="sixteen"){b++;a[b]=89;}//判16,16*16%100=89
		else if (f=="seventeen"){b++;a[b]=17;}//判17,17*17%100=17
		else if (f=="eighteen"){b++;a[b]=24;}//判18,18*18%100=24
		else if (f=="nineteen"){b++;a[b]=61;}//判19,19*19%100=61
		else if (f=="twenty"){b++;a[b]=0;}//判20,20*20%100=0
	}//对于这个while循环,其作用是完成1.输入的部分。看似繁琐复杂,难以敲出,其实只要打出1和2,就可以以2为摸版,Ctrl+v复制粘贴。
	sort(a+1,a+b+1);//3,排序,此排序非彼排序,并不是3,仅仅只是排序结果,因为小的放最前面,整体就越小。此次在解释中阐释。
	while (a[l]==0&&l<b)l++;//首位去0,;
	cout<<a[l];/*第一位不需要补0*/for (int i=l+1;i<=b;i++)printf ("%02d",a[i]);//输出
}
解释

一个三位数数,可以看成100a+10b+c,a越大,值越大;a越小,值越小。当三数为9,5,0时,让0为首,变为二位数,而不为0则为三位数,三位数永远大于二位数,此定理适用于

N P1597 语句解析

P1597 语句解析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

理解题意
1.输入

一个n:=abc或n:=m的形式,其中abc为常数,n,m为字母,分别表示将n赋值为abs或将n赋值为m的值。

2.思路

此题,只关系‘=’即可。‘=’前2位为n,后1位为abc或m。区分两者即可。

因此,可得代码

代码
#include<bits/stdc++.h>
using namespace std;
int a[3],e,n=1;char d;string f;
int main ( )
{
	ios::sync_with_stdio(false);
	cin>>f;
	for (int i=0;i<f.size();i++)//a[i]为第i+1个字母的值。(三个字母分别为a,b,c)
	{
		if (f[i]=='=')//找‘=’。
		{
			if (f[i+1]>='0'&&f[i+1]<='9')//若‘=’后为数字
			{
				while (f[i+n]>='0'&&f[i+n]<='9'){e=e*10+f[i+n]-'0';n++;}//求出此数
				a[f[i-2]-'a']=e;e=0;n=1;//赋值
			}
			else a[f[i-2]-'a']=a[f[i+1]-'a'];//若‘=’后为字母,赋值
		}
	}
	cout<<a[0]<<" "<<a[1]<<" "<<a[2];//输出
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值