7、错误票据
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)
每个整数代表一个ID号。
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
看到这种题就想用散列 但是好想简单的cin cout是不会区分空格和换行的
我不会的知识复习
1、每行输入长度不等的数------->用getchar()接受空格 如果不是空格就进入了下一行
2、散列的0和缺失数据的0冲突------>因为连续记录最大最小
中间用了尝试的getchar emmmmmmm输入的数据是char强制转换也转不回来了
#include
int main()
{
int a[10001]={0}; //初始化数组
long m,min=100000,max=0,i,n;
char c;
scanf("%d",&n);
for(i=0;imax) max=m;
if(m
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:oo*oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
程序输入:
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
程序输出:
一个整数,表示最小操作步数
我无数次想把string当int数组加减得用了……我是个智障好了
然后还被最小操作步骤误导,其实就是见到不一样翻就对了……会不会存在翻了过了要求的还不是要的?不会,是一个一个判断的,不一样就翻了,会不会比从头对比开始翻更简单的方法……我脑子成天在想什么
#include
#include
#include
using namespace std;
string s1,s2;
int p1[1005],p2[1005];
int ans=0;
int main(){
cin>>s1>>s2;
//输入数据处理
for(int i=0 ;i
10.连号区间数
这个题主要考脑子
解题关键:
判断是否有序:if((max-min) == (j-i))
题目如下:
小明这些天一直在思考这样一个奇怪而有趣的问题:
在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:
如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。
当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入格式:
第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。
输出格式:
输出一个整数,表示不同连号区间的数目。
示例:
用户输入:
4
3 2 4 1
程序应输出:
7
用户输入:
5
3 4 2 5 1
程序应输出:
9
解释:
第一个用例中,有7个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [2,2], [3,3], [4,4]
第二个用例中,有9个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [1,5], [2,2], [3,3], [4,4], [5,5]
#include
int main()
{
int s[50005],a,i,min,max,count=0,j;
scanf("%d",&a);
for( i = 0; i < a; i++) {
scanf("%d",&s[i]);
}
for( i = 0; i < a;i++ ){
min=s[i];
max=s[i];
for( j = i; j < a; j++) {
if(min>s[j]){min =s[j];}
if(max
总结一下
10道题两道看了答案也不会……怕是凉 先看看别的再回来