码迷,mamicode.com
首页 > 其他好文 > 详细

简单字符串

时间:2018-07-13 21:07:49      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:printf   region   文章   ret   直接   文本   xxx   文本编辑   scan   

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≤ 单词长度 ≤1010 。

1≤1≤ 文章长度 ≤1,000,0001,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 }

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

简单字符串

标签:printf   region   文章   ret   直接   文本   xxx   文本编辑   scan   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!