简单字符串

P1055 ISBN号码

题目描述

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括 99 位数字、 11 位识别码和 33 位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如 00 代表英语;第一个分隔符-之后的三位数字代表出版社,例如 670670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以 11 加上次位数字乘以 22 ……以此类推,用所得的结果 \bmod 11mod11 ,所得的余数即为识别码,如果余数为 1010 ,则识别码为大写字母 XX 。例如ISBN号码0-670-82162-4中的识别码 44 是这样得到的:对067082162这 99 个数字,从左至右,分别乘以 1,2,...,91,2,...,9 再求和,即 0×1+6×2+……+2×9=1580×1+6×2+……+2×9=158 ,然后取 158 \bmod 11158mod11 的结果 44 作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出Right;如果错误,则输出你认为是正确的ISBN号码。

输入输出格式

输入格式:

一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

输出格式:

一行,假如输入的ISBN号码的识别码正确,那么输出Right,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符-)。

输入输出样例

输入样例#1: 复制

0-670-82162-4

输出样例#1: 复制

Right

输入样例#2: 复制

0-670-82162-0

输出样例#2: 复制

0-670-82162-4

说明

2008普及组第一题

思路:如果写过pat检测身份证的话那这道就太简单了;

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[15];
 4 int main(){
 5     scanf("%s",s);
 6     int t=1;
 7     int sum=0;
 8     for(int i=0;i<13;i++){
 9         if(i!=12){
10             if(s[i]>=‘0‘&&s[i]<=‘9‘){
11                 sum=sum+(s[i]-‘0‘)*t;
12                 t++;
13             }
14             else continue;
15         }
16         else{
17             sum=sum%11;
18             int b;
19             if(s[i]==‘X‘){
20                 b=10;
21             }
22             else{
23                 b=s[i]-‘0‘;
24             }
25             if(sum==b){
26                 printf("Right\n");
27             }
28             else{
29                 if(sum==10) s[i]=‘X‘;
30                 else s[i]=sum+‘0‘;
31                 for(int i=0;i<13;i++){
32                     printf("%c",s[i]);
33                 }
34                 printf("\n");
35             }
36             break;
37         }
38     }
39 } 

P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…

题目描述

众所周知,在每一个彗星后都有一只UFO。这些UFO时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的UFO带走。

小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 AA 是 11 , ZZ 是 2626 。例如, USACOUSACO 小组就是 21 \times 19 \times 1 \times 3 \times 15=1795521×19×1×3×15=17955 。如果小组的数字 \bmod 47mod47 等于彗星的数字 \bmod 47mod47 ,你就得告诉这个小组需要准备好被带走!(记住“ a \bmod bamodb ”是 aa 除以 bb 的余数; 34 \bmod 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

思路:暴力;

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[10],s1[10];
 4 int main(){
 5     scanf("%s",s);
 6     scanf("%s",s1);
 7     int t=strlen(s),t1=strlen(s1);
 8     int sum=1;
 9     for(int i=0;i<t;i++){
10         sum=(sum*(s[i]-‘A‘+1))%47;
11     }
12     sum%=47;
13     int sum1=1;
14     for(int i=0;i<t1;i++){
15         sum1=(sum1*(s1[i]-‘A‘+1))%47;
16     }
17     sum1%=47;
18     if(sum==sum1){
19         printf("GO\n");
20     }
21     else{
22         printf("STAY\n");
23     }
24 } 

P1308 统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章

中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。

输入输出格式

输入格式:

共 22 行。

第 11 行为一个字符串,其中只含字母,表示给定单词;

第 22 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式:

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 00 开始);如果单词在文章中没有出现,则直接输出一个整数 -1?1 。

输入输出样例

输入样例#1: 复制

To
to be or not to be is a question

输出样例#1: 复制

2 0

输入样例#2: 复制

to
Did the Ottoman Empire lose its power at that time

输出样例#2: 复制

-1

说明

数据范围

1≤1≤ 单词长度 ≤10≤10 。

1≤1≤ 文章长度 ≤1,000,000≤1,000,000 。

noip2011普及组第2题

思路:暴力找,但是这道题很奇怪,我认为下面的代码其实是错的,应为连样例都过不了,但是却AC了

 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 using namespace std;
 5 int main(){
 6     string a;
 7     string b;
 8     getline(cin,a,‘\n‘);
 9     getline(cin,b,‘\n‘);
10     for(int i=0;i<b.length();i++){
11         if(b[i]>=‘a‘ && b[i]<=‘z‘)
12             b[i]=b[i]-32;
13     }
14     for(int i=0;i<a.length();i++){
15         if(a[i]>=‘a‘ && a[i]<=‘z‘)
16             a[i]=a[i]-32;
17     }
18     int j;
19     int sum=0;
20     int k=0;
21     for(int i=0;i<b.length();i++){
22         if(a[0]==b[i]){
23             for(j=0;j<a.length();j++){
24                 if(a[j]!=b[i+j])
25                     break;
26             }
27             if(j==a.length() && b[i+j]==‘ ‘ && b[i-1]==‘ ‘){
28                 sum++;
29                 if(sum==1){
30                     k=i;
31                 }
32             }
33         }
34     }
35     if(k!=0){
36         cout<<sum<<" "<<k;
37     }
38     else{
39         cout<<-1;
40     }
41     return 0;
42 }

这个代码我觉得是过的,结果它没过,我觉得应该是题目有点问题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[15],s1[1000005];
 4 int main(){
 5     scanf("%s\n",s);
 6     gets(s1+1);
 7     s1[0]=‘ ‘;s1[strlen(s1)]=‘ ‘;s1[strlen(s1)+1]=‘\0‘;
 8     for(int i=0;i<strlen(s);i++){
 9         if(s[i]>=‘A‘&&s[i]<=‘Z‘){
10             s[i]=s[i]-‘A‘+‘a‘;
11         }
12     }
13     for(int i=0;i<strlen(s1);i++){
14         if(s1[i]>=‘A‘&&s1[i]<=‘Z‘){
15             s1[i]=s1[i]-‘A‘+‘a‘;
16         }
17     }
18     int sum=0,xiabiao;
19     for(int i=0;i<strlen(s1);i++){
20         if(s1[i]==s[0]){
21             int f=1;
22             for(int j=0;j<strlen(s);j++){
23                 if(s1[i+j]!=s[j]){
24                     f=0;
25                     break;
26                 }
27             }
28             if(f&&s1[i+strlen(s)]==‘ ‘&&s1[i-1]==‘ ‘){
29                 sum++;
30                 if(sum==1){
31                     xiabiao=i;
32                 }
33             }
34         }
35     }
36     if(sum==0)
37         printf("-1\n");
38     else
39         printf("%d %d\n",sum,xiabiao-1);
40 }

应为在这道题上存在疑问,我也就没有去写下面的题目;

原文地址:https://www.cnblogs.com/dahaihaohan/p/9307317.html

时间: 2024-07-30 16:55:47

简单字符串的相关文章

C 封装一个通用链表 和 一个简单字符串开发库

引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是C++写,界面是C#写.那时候刚进去评级我是中级,因为他问我关于系统锁和信号量都答出来.开发一段 时间,写C#也写的很溜.后面招我那个人让我转行就写C++和php,那时候就开始学习C++有关知识. 后面去四川工作了,开发安卓,用eclipse + java语法 + android jdk,开发前端,

POJ3617 简单字符串

三分之一的通过率的字符串 题意为,输入一个S串,有一个空串T.对S串有两种操作,一是取出S串的头放入T串的尾,二是取出S串的尾放入T串的尾.要求是要使得T串的字典序最小. 从题意来看是一个很明显的贪心思路.那么想到这一步其实比较接近答案了,但是需要注意的一点是当S串的头和尾相同的时候,那么这个时候我们当然也希望取出更小的字符,所以就需要比较下一个字符.但是如果指向头和尾的指针都分别往里前进一位的时候,这俩字符还是相同,咋办?这个情形...对,就是回文字符串.形同“ABCDCBA”这样的字符串.这

poj 3077 Rounders 【简单字符串处理】

题意:就是4舍5入到最近的数. 题意有些难理解... 代码: #include <stdio.h> #include <string.h> char s[10]; int main() { int t, n; scanf("%d", &t); while(t --){ memset(s, 0, sizeof(s)); scanf("%s", s); int len = strlen(s); if(len == 1){ printf(&

简单字符串排序

简单字符串排序 Time Limit: 5000MS Memory limit: 100000K 题目描述 从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变). 输入 输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩. 输出 输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开. 示例输入 Bush White Mark Jean Black Wood

1442: Neo 的简单字符串(字符串)

1442: Neo 的简单字符串 时间限制: 10 Sec 内存限制: 128 MB 提交: 9 解决: 3 统计 题目描述 Neo 给你一系列字符串,请你输出字符串中的不同单词个数以及总单词个数. 输入 多组输入,每组数据都是一行字符串(长度小于200),其中每个单词以空格隔开(单词都是小写字母组成). 输出 输出字符串中的不同单词个数以及总单词个数. 样例输入 i love china aa aa bb 样例输出 3 3 2 3 来源 LZ 提交讨论 #include<bits/stdc++

第一部分之简单字符串SDS(第二章)

一,什么是SDS? 1.引出SDSC字符串:c语言中,用空字符结尾的字符数组表示字符串简单动态字符串(SDS):Redis中,用SDS来表示字符串.在Redis中,包含字符串值的键值对在底层都是由SDS实现的首先,Redis使用C语言写的,但是Redis没有使用C语言传统的字符串表示,它自己构建了简单字符串的抽象类型来表示字符串. 2.SDS的定义一个sdshdr结构表示一个SDS值.结构如下:struct sdshdr {    //记录buf数组中已使用字节的数量    int len;  

洛谷-你的飞碟在这儿-简单字符串

题目描述 Description 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走.他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?).关于如何搭配的细节会在下面告诉你:你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的UFO带走. 小组名和彗星名都以下列方式转换

UVa 401 Palindromes(简单字符串)

简单的判断是否是回文串.镜像串,然后自己写的真费劲,没逃掉刘汝佳的书,这里的代码很有技巧性,特别值得学习,额,其实他书上的代码都很精简 Character Reverse Character Reverse Character Reverse A A M M Y Y B   N   Z 5 C   O O 1 1 D   P   2 S E 3 Q   3 E F   R   4   G   S 2 5 Z H H T T 6   I I U U 7   J L V V 8 8 K   W W

Java实验--关于简单字符串回文的递归判断实验

首先题目要求写的是递归的实验,一开始没注意要求,写了非递归的方法.浪费了一些时间,所谓吃一堑长一智.我学习到了以后看实验的时候要认真看实验中的要求,防止再看错. 以下是对此次的实验进行的分析: 1)递归是运用到了栈的思想 2)回文是一段从中间开始倒置的文字,回代的过程中出现不同的符号的时候就说明这段文字不是回文了 根据上面对回文判断的分析,就拿最简单的121来说,要每个字符判断直至2所在的位置,然后依次回代判断前面的1和后面的1的位置(上述的描述就类似于栈的思想). 有关于栈还有递归其实我并不熟