Openjudge 1.7文字列

1.7.9文字シフトした後、

1行のコードを読みます:

while((k=getchar())!=EOF)

ASCIIコード

小文字\(A \) 97

小文字\(Z \) 122

大文字\(A \) 65

大文字\(Z- \) 90

デジタル0 \(48 \)

ナンバー9 \(57 \)

//1.7.9
#include<bits/stdc++.h>
using namespace std; 
int main()
{
    char p[85];
    char k;
    int i=0;
    while((k=getchar())!=EOF){
        if(k>=65&&k<=89) k++;
        else if(k==90) k=65;
        else if(k>=97&&k<=121) k++;
        else if(k==122) k=97;
        //else if(k==32) putchar('32');
        p[i]=k;
        i++;
        putchar(k); 
    }
    //puts(p);
    return 0;
}

1.7.11リードオンリーメンバー

//1.7.11?
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1020
char s1[N],s2[N],s3[N];
int a[26];
bool fail = 0;
int main(){
    scanf("%s%s%s",s1,s2,s3);
    for(int i=0;i<26;i++){
        a[i]=-1;
    }
    int len=strlen(s1);
    if(len<26) fail=1;
    else{
        for(int i=0;i<len;i++){
            if(a[s1[i]-'A'] == -1){
                a[s1[i]-'A']=s2[i]- 'A';
            }else{
                if(a[s1[i]-'A']!= s2[i]- 'A'){
                    fail = 1;
                    break;
                }
            }
        }
        for(int i = 0;i<26;i++){
            if(a[i]==-1){
                fail = 1;
                break;
            }
        }
        for(int i = 0;i<26;i++){
            for(int j=i+1;j<26;j++){
                if(a[i]==a[j]){
                    fail = 1;
                    break;
                }
            }
        }
    }
    if(fail == 1){
      cout<<"Failed"<<endl;
    }
    else{
        len = strlen(s3);
        for(int i = 0; i <len;++i)
            s3[i]=a[s3[i]-'A']+'A';
        printf("%s\n",s3);
    }
    return 0;
}

1.7.18検証ストリング

#include <cstirng>
  strstr(a,b);

戻り値は、サブかどうかを決定するため、0または1であります

//1.7.18
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char a[205],b[205];

int main( ){
    gets(a);
    gets(b);
    int len1,len2;
    len1=strlen(a);len2=strlen(b);
    bool op=0;
    if(len2>len1){
        swap(a,b);
        swap(len1,len2);
    }
    if(strstr(a,b)) printf("%s is substring of %s",b,a);
    else printf("No substring"); 
    return 0;
}

1.7.24ワード長

次の文の修正だけで罰金[これが私たちに伝えている\(<iostreamの> \)信頼性の低い]
`` `
COUT >> S >> ""; //元

printf( "%dの、"、S); //今

有可能""(双引号)打成‘’(单引号)了一开始没发现
  
  所以还是$printf$吧
  

//1.7.24

含める

含める

含める

含める

名前空間stdを使用。
[2001]チャー。
int型S = 0;
INTメイン(){
を取得()。
INT L = strlenを()。
(I ++; I <L INTがI = 0)するための
{
(![I] =」「)の場合++;
他の場合([I] == ' '&& A [I-1] =!'')
{
のprintf( "%dを、" S)。
S = 0。
}
}
COUT << S。
0を返します。
}

# 1.7.29 $ISBN$号码
             
忘了$k==10$的特判‘$X$’

//1.7.29

含める

含める

含める

含める

名前空間stdを使用。
チャー[15]。
int型B [15]。
int型のk;
INTメイン(){
scanf関数( "%s"は、+ 1)。
int型J = 1;
以下のために(INT I 1 =; I <= 11; I ++){
IF(I == 2 || I == 6)続けます。
他{
K + =([I] - '0')* J。
J ++;
}
}
//のprintf( "%D \ n"、K)。
K%= 11。
(K == 10)K = 'X'の場合- '0'。
もし(K == [13] - '0')のprintf( "右")。
他{
[13] = K + '0'。
printf( "%s"は、+ 1)。
}
0を返します。
}

重点!!!
                           

。= 11%のK;
IF(K == 10)= K 'X-' - '0'; //文字間の動作上の
場合(K == [13] - '0')のprintf( "右") ;
そうでなければ{
A = K + '0' [13である];
のprintf( "%のS"、A + 1);
}

# 1.7.32 行程缩写
                           
在程序内开数组,要memset要不然输出的数很怪

//1.7.32

含める

含める

含める

含める

含める

名前空間stdを使用。
INTメイン(){
チャーS [1006]。
scanf関数( "%s"は、S + 1)。
INT [1010];
memsetの(、0、はsizeof()); //!
int型LEN1;
LEN1 = STRLEN(S + 1)。
; <{(I ++ = LEN1 iに対してINT I 1 =)
+ '' - IF(S [I] = 'A' && S [I] <= 'Z')S [I] = S [I]> 'A';
}
//のprintf( "%s"は、S + 1)。
以下のために(INT I = 1; I <= LEN1; I ++){
IF(S [I] == S [I + 1])[S [I] - [A '] ++;
他{
のprintf( "(%のC、%のD)"、S [i]は、[S [I] - [A '] + 1)。
[S [I] - [A '] = 0;
}
}
0を返します。
}


             
# 1.7.35 字符串的展开

//1.7.35

含める

含める

含める

含める

含める

名前空間stdを使用。
BOOL iszimu(チャーA){
IF(> = 'A' && A <= 'Z')がtrueを返します。
0を返します。
}
(文字列&S、INT P1、INT P2、INT P3)ボイド解決{
(P1 == 1)であれば
{
(INT iが0 = I ++; I <s.length())のために
{
=(Sなら[I] = ' - ')
{
IF(iszimu(S [I-1])&& iszimu(S [I + 1])&& S [I + 1]> S [I-1] +1)
{
IF(P3 == 1)
{
用(チャー一時= S [I-1] +1; TEMP <S [I + 1]; TEMP ++)
{
ため(INT J = 0; J <P2、J ++)COUT << TEMP。
}
}
そうでなければ
{
(-1 [I + 1]チャー一時= S;温度> = S [I-1] +1; temp--)のために
{
(int型J = 0; J <P2、J ++)用COUT < <TEMP;
}
}
続けます。
}
そうであれば(isdigit(S [I-1])&& isdigit(S [I + 1])&& S [I + 1]> S [I-1] +1)
{
(P3 == 1)であれば
{
(チャーTEMP用= S [I-1] +1; TEMP <S [I + 1]; TEMP ++)
{
ため(INT J = 0; J <P2、J ++)COUT << TEMP。
}
}
そうでなければ
{
(-1 [I + 1]チャー一時= S;温度> = S [I-1] +1; temp--)のために
{
(int型J = 0; J <P2、J ++)用COUT < <TEMP;
}
}
続けます。
}
そうであれば(S [I-1]> = S [I + 1])COUT << ' - '。
そうであれば(S [I-1] + 1 == S [I + 1])。
他COUT << ' - '; //刚开始没有这个、如果S-2这种就会出错(少一个- )
}

COUT << S [i]は、
}
COUT << ENDL。





IF(S [I] == ' - ')
{
IF(iszimu(S [I-1])&& iszimu(S [I + 1])&& S [I + 1]> S [I-1] +1)
{
(P3 == 1)であれば
{
TEMP <S [I + 1] - ( '' - 'A'); - ( '' - 'A')(チャー一時= S [I-1] +1のために; TEMP ++)
{
ため(INT J = 0; J <P2、J ++)COUT << TEMP。
}
}

{
用(チャー一時= S [I + 1] -1 - ( '' - 'A'); TEMP> = S [I-1] +1 - ( '' - 'A')。 temp--)
{
ため(INT J = 0; J <P2、J ++)COUT << TEMP。
}
}
続けます。
}
他(isdigit(S [I-1])&& isdigit(S [I + 1])&& S [I + 1]> S [I-1] +1)であれば
{
(P3 == 1)であれば
{
(charの一時= S [I-1] +1; TEMP <S [I + 1]。
TEMP ++) {
ため(INT J = 0; J <P2、J ++)COUT << TEMP。
}
}

{
用(チャー一時= S [I + 1] -1; TEMP> = S [I-1] +1; temp--)
{
ため(INT J = 0; J <P2、J ++)COUT << TEMP ;
}
}
続けます。
}
そうであれば(S [I-1]> = S [I + 1])COUT << ' - '。
そうであれば(S [I-1] + 1 == S [I + 1])。
他のcoutの<< ' - ';
}

COUT << S [i]は、
}
のprintf( "\ n");
}

{
ためには、(INT iは0 =; I <s.length(); I ++)
{
場合(S [I] == ' - ')
{
場合(iszimu(S [I-1])&& iszimu(S [I +1])&& S [I + 1]> S [I-1] +1)
{
+1(チャー一時= S [I-1]のために、温度<S [I + 1]; TEMP ++)
{
(INT用J = 0; jの<P2; J ++)coutの<<」「;
}
続けます。
}
そうであれば(isdigit(S [I-1])&& isdigit(S [I + 1])&& S [I + 1]> S [I-1] +1)
{
用(チャー一時= S [I-1] + 1;温度<S [I + 1]; TEMP ++)
{
ため(INT J = 0; J <P2、J ++)COUT <<」
「;
}
続けます。
}
そうであれば(S [I-1]> = S [I + 1])COUT << ' - '。
そうであれば(S [I-1] + 1 == S [I + 1])。
他のcoutの<< ' - ';
}

COUT << S [i]は、
}
COUT << ENDL。
}
}
int型のmain(){
int型P1、P2、P3。
文字列s;
一方、(CIN >> P1 >> P2 >> P3)
{
CIN >> S。
(S、P1、P2、P3)を解きます。
}
0を返します。
}

# 最小公倍数·最大公因数
### 辗转相除法
重要定理:如果$a,b$的最大公因数和最小公倍数是$m,n$,那么$ab=mn$
  

含める

含める

含める

名前空間stdを使用。
int型GCD(int型のx、int型のY){
int型、R = X%Y。
一方、(!R = 0){
X = Y。
Y = R。
R = X%のY、
}
Yを返します。
}
INT LCM(int型のx、int型のY){
リターンX * Y / GCD(X、Y)
}
int型のmain(){
int型A、B。
printf( "入力してください2つの数aとbの");
scanf関数( "%D%D"、&、&B)。
printf( "=%のD、B =%D \ n"、B)。
printf( "GCD(%dを、%のD)=%dを、LCM(%dを、%のD)=%dの" A、B、GCD(a、b)は、A、B、LCM(b)参照) ;
}
↑辗转相除法求最大公因数和最小公倍数 ### 以1.7.30字符环为例CPP
//1.7.30字符环

含める

含める

含める

含める

名前空間stdを使用。
int型GCD(int型のx、int型のY){
int型、R = X%Y。
一方、(!R = 0){
X = Y。
Y = R。
R = X%のY、
}
Yを返します。
}
INT LCM(int型のx、int型のY){
リターンX * Y / GCD(X、Y)
}
int型のmain(){
文字S1 [260]、S2 [260]。
scanf関数( "%S%S"、S1 + 1、S2 + 1)。
int型LEN1、LEN2。
LEN1 = STRLEN(S1); LEN2 = STRLEN(S2)。

if(len2>len1){
    swap(len1,len2);
    swap(s1,s2);
}
int lengcd;
lengcd=gcd(len1,len2);
for(int i=1;i<=len1;i++){
    for(int j=1;j<=len1+len2,j++){
        int k=j%len2;
        while(s1[k])
    }
}

}
`` `

#単語の数をカウントし
、 `` `CPP

含める

含める

名前空間stdを使用。
チャーS [105]。
int型NW = 1、カウント数= 0;
// WAY1
INTメイン(){
取得し、(S + 1)。
S [0] =」「;
INTル= STRLEN(S + 1)。
// printfの( "%d個\ n"は、ル);
{(; I <=ルI ++ iが0 = INT)のための
IF(S [I] ==」「){
NW = 1。
}
他{
IF(NW == 1){
NW = 0。
++数えます。
}
}
//のprintf( "%D%D%C \ n"は、I、カウント、S [I])。
}
のprintf( "%d個"、カウント)。
0を返します。
}
ボイドウェイ2(){
(S)を取得し、
以下のために(INT I 0 =; I <= 101; I ++){
IF(S [I] == '\ 0'){
ブレーク。
}
もし、(S [I] ==」「){
NW = 1。



NW = 0;
++数えます。
}
}
//のprintf( "%D%D%C \ n"は、I、カウント、S [I])。
}
のprintf( "%d個"、カウント)。
リターン;
}

含める

含める

含める

STD名前空間用い、
チャーSM [105];
CHAR STR [105];
int型CNT = 0;
ボイドウェイ3(){
スタック<整数> SP;
(SM)を取得し、
INTルは(SM)strlenを。=。
sp.push(0 ); //事前に空間に押し込まれる
I = 0(INTのために、I <ル; I ++){
IF(SM [I] = '')sp.push(SM [I] - '0');!
他SP。プッシュ(0); //文字列処理
}
ながら(!sp.size()= 0){
;チャーTMPを
TMP = sp.top();
IF(TMP == 0)CNT ++;
sp.pop(); / /統計
}
のprintf( "%のD"、CNT);
リターン;
}
`

おすすめ

転載: www.cnblogs.com/liuziwen0224/p/11991548.html