P1307 [NOIP2011 普及组] 数字反转
目录
P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here
题目描述
给定一个整数 �N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 �N。
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入 #1复制
123
输出 #1复制
321
输入 #2复制
-380
输出 #2复制
-83
说明/提示
【数据范围】
−1,000,000,000≤�≤1,000,000,000−1,000,000,000≤N≤1,000,000,000。
noip2011 普及组第一题
知识点:n%10为n的个位数 n/10删去个位数,
#include<bits/stdc++.h>
using namespace std;
//逆转数字
int main(){
long long int n;
cin>> n;
long long int b = 0;
while(n != 0){
b = b*10 + n%10;
n /= 10;
}
cout<< b << endl;
return 0;
}
P1317 低洼地
题目描述
一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?
如图:地高变化为 0 1 0 2 1 2 0 0 2 0
输入格式
两行,第一行n,表示有n个数。第2行连续n个数表示地平线高度变化的数据,保证首尾为0。(3<=n<=10000,0<=高度<=1000)
输出格式
一个数,可能积水低洼地的数目。
输入输出样例
输入 #1复制
10 0 1 0 2 1 2 0 0 2 0
输出 #1复制
3
想法:有很多种解法,比较明显的是 低洼处 = 山峰 - 1
我的代码:确定左坡,确定右坡,count++。定义个 l = 0 作为标记,左坡的标志是 左大于右,右坡的标志是 左小于右,我们找到左坡a[i] < a[i-1],l = 1,在左坡存在的前提下,如果找到右坡 a[i] > a[i-1] && l == 1 ,此时count++,将标记归为 0
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>> n;
int a[10001];
int l = 0;
int count = 0;
for(int i = 0; i < n; i++){
cin>> a[i];
}
for(int i = 1; i < n; i++){
if(a[i] < a[i-1]){
//左坡形成
l = 1;
}
if(a[i] > a[i-1] && l == 1){
l = 0;
count++;
}
}
cout<< count << endl;
return 0;
}
P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here
题目描述
众所周知,在每一个彗星后都有一只 UFO。这些 UFO 时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的 UFO 带走。
小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 AA 是 11,ZZ 是 2626。例如,USACOUSACO 小组就是 21×19×1×3×15=1795521×19×1×3×15=17955。如果小组的数字 mod 47mod47 等于彗星的数字 mod 47mod47,你就得告诉这个小组需要准备好被带走!(记住“� mod �amodb”是 �a 除以 �b 的余数,例如 34 mod 1034mod10 等于 44)
写出一个程序,读入彗星名和小组名并算出用上面的方案能否将两个名字搭配起来,如果能搭配,就输出 GO
,否则输出 STAY
。小组名和彗星名均是没有空格或标点的一串大写字母(不超过 66 个字母)。
输入格式
第1行:一个长度为 11 到 66 的大写字母串,表示彗星的名字。
第2行:一个长度为 11 到 66 的大写字母串,表示队伍的名字。
输出格式
无
输入输出样例
输入 #1复制
COMETQ HVNGAT
输出 #1复制
GO
输入 #2复制
ABSTAR USACO
输出 #2复制
STAY
说明/提示
题目翻译来自 NOCOW。
USACO Training Section 1.1
想法: 定义getchar()来接受回车。将大写字母作为数字运用到ASCLL码的知识,@是64,A是65,注意m,n定义初始值为1.
#include<bits/stdc++.h>
using namespace std;
int main(){
string a, b;
cin>> a;
char ch = getchar();
cin>> b;
int m = 1, n = 1;
for(int i = 0; i < a.length(); i++){
m *= a[i] - '@';
}
for(int i = 0; i < b.length(); i++){
n *= b[i] - '@';
}
m = m%47;
n = n%47;
if(m == n){
cout<< "GO" << endl;
}else{
cout<< "STAY" << endl;
}
return 0;
}
P1179 [NOIP2010 普及组] 数字统计
题目描述
请统计某个给定范围[�,�][L,R]的所有整数中,数字 22 出现的次数。
比如给定范围[2,22][2,22],数字22 在数 22中出现了 11 次,在数1212 中出现 11 次,在数 2020 中出现 11次,在数 21 中出现 11 次,在数 2222 中出现 22次,所以数字22 在该范围内一共出现了 66次。
输入格式
22个正整数 �L 和 �R,之间用一个空格隔开。
输出格式
数字 22出现的次数。
输入输出样例
输入 #1复制
2 22
输出 #1复制
6
输入 #2复制
2 100
输出 #2复制
20
说明/提示
1≤�≤�≤1000001≤L≤R≤100000。
想法:首先要注意的是循环字母不可以直接拿来用,要使用另一个变量来接受,n%10为n的个位数,n/10将n降次,下一次循环n%10就是n的十位数
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int l, r;
cin>> l >> r;
int count = 0;
for(int i = l; i <= r; i++){
int n = i;
while(n!= 0){
if(n%10 == 2){
count++;
}
n = n/10;
}
}
cout<< count << endl;
return 0;
}
P1319 压缩技术
题目描述
设某汉字由 �×�N×N 的 00 和 11 的点阵图案组成。
我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 00,第二个数表示接下来连续有几个 11,第三个数再接下来连续有几个 00,第四个数接着连续几个 11,以此类推……
例如: 以下汉字点阵图案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 77 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一个数是 �N ,其余各位表示交替表示0和1 的个数,压缩码保证 �×�=N×N= 交替的各位数之和)
输入格式
数据输入一行,由空格隔开的若干个整数,表示压缩码。
输出格式
表示最后的汉字点阵图(点阵符号之间不留空格)。
输入输出样例
输入 #1复制
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
输出 #1复制
0001000 0001000 0001111 0001000 0001000 0001000 1111111
说明/提示
数据保证,3≤�≤2003≤N≤200。
想法:首先,以后定义数组千万要定义在main函数外面,外面是数据域,里面是栈,存的多了容易爆栈。第一个循环停止输入。下面的循环判断i是技术还是偶数,奇数输出0, 偶数输出1.
#include <bits/stdc++.h>
using namespace std;
int a[205];
int main(){
int n,s=0,count=0;
//int a[205];
cin>>n;
for(int i = 1; i <= 205; i++){
if(s >= n*n){
break;
}
cin>> a[i];
s = s + a[i];
}
for(int i = 1; i <= 205; i++){
if(i % 2 == 1 || i == 1){
for(int j = 0; j < a[i]; j++){
cout<< 0;
count++;
if(count % n == 0){
cout<< endl;
}
}
}else{
for(int u = 0; u < a[i]; u++){
cout<< 1;
count++;
if(count % n == 0){
cout<< endl;
}
}
}
}
return 0;
}