C++ 语法习题(3)

news2024/11/15 23:56:54

                                                字符串

1.字符串长度

给定一行长度不超过 100 的非空字符串,请你求出它的具体长度。

输入格式

输入一行,表示一个字符串。注意字符串中可能包含空格。

输出格式

输出一个整数,表示它的长度。

数据范围

1≤字符串长度≤100
字符串末尾无回车

输入样例:
I love Beijing.
输出样例:
15

 参考代码:

//fgets在读取的时候也会帮我们把回车('\n)读进来。
#include <iostream>
#include <cstdio>

using namespace std;
int main()
{
    char str[101];
//fgets(字符串名,最大读取的长度+1,stdin(固定必备的));
    fgets(str,101,stdin);//读取长度最多为100可包含空格的字符串。
    int count=0;
//for()的第二句:字符串str第i个有效且不等于回车。
  for(int i=0;str[i]&&str[i]!='\n';i++)
  {
      count++;
  }
  cout<<count<<endl;
    return 0;
}

 2.字符串中的数字个数

输入一行字符,长度不超过 100,请你统计一下其中的数字字符的个数。

输入格式

输入一行字符。注意其中可能包含空格。

输出格式

输出一个整数,表示数字字符的个数。

输入样例:
I am 18 years old this year.
输出样例:
2

参考代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    char s1[101];
    fgets(s1,101,stdin);
    int c=0;
    for(int i=0;s1[i]&&s1[i]!='\n';i++)
    {
//if判断每个字符是否是数字也就是范围在字符串0-字符串9之间。
        if(s1[i]>='0'&&s1[i]<='9') c++;
    }
    cout<<c<<endl;
    return 0;
}

 

 3.循环相克令

循环相克令是一个两人玩的小游戏。

令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。

双方以此动作判定输赢,猎人赢枪、枪赢狗熊、狗熊赢猎人,动作相同则视为平局。

现在给定你一系列的动作组合,请你判断游戏结果。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

接下来 T 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 HunterBearGun 中的一个,这三个单词分别代表猎人,狗熊和枪。

输出格式

如果第一个玩家赢了,则输出 Player1

如果第二个玩家赢了,则输出 Player2

如果平局,则输出 Tie

数据范围

1≤T≤100

输入样例
3
Hunter Gun
Bear Bear
Hunter Bear
输出样例
Player1
Tie
Player2

 参考代码:

//相当于剪子包袱锤之间的关系。
#include <iostream>
using namespace std;
int main()
{
    string s1,s2;
    int n=0;cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s1>>s2;
        if(s1==s2) cout<<"Tie"<<endl;
        else 
        {
            if(s1=="Hunter")
            {
                if(s2=="Bear") cout<<"Player2"<<endl;
                else cout<<"Player1"<<endl;
            }
            else if(s1=="Bear")
            {
                if(s2=="Hunter") cout<<"Player1"<<endl;
                else cout<<"Player2"<<endl;
            }
            else if(s1=="Gun")
            {
                if(s2=="Hunter") cout<<"Player2"<<endl;
                else cout<<"Player1"<<endl;
            }
        }
    }
    return 0;
}

4.字符串加空格

给定一个字符串,在字符串的每个字符之间都加一个空格。

输出修改后的新字符串。

输入格式

共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式

输出增加空格后的字符串。

数据范围

1≤字符串长度≤100

输入样例:
test case
输出样例:
t e s t   c a s e

 参考代码:
 

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    char str[101];
    fgets(str,101,stdin);
//因为读入的字符串可能有空格所以用fgets读入。
    for(int i=0;str[i]&&str[i]!='\n';i++)
    {
//每次输出玩一个字符后再输出一个空格
        cout<<str[i]<<' ';
    }
    return 0;
}

5. 替换字符

给定一个由大小写字母构成的字符串。

把该字符串中特定的字符全部用字符 # 替换。

请你输出替换后的字符串。

输入格式

输入共两行。

第一行包含一个长度不超过 30的字符串。

第二行包含一个字符,表示要替换掉的特定字符。

输出格式

输出共一行,为替换后的字符串。

输入样例:
hello
l
输出样例:
he##o

参考代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
//因为最大字符串长度为40,我们定义字符串长度较多一些。
    char str[41];
    fgets(str,41,stdin);
    char s;
    cin>>s;
    for(int i=0;str[i] && str[i]!='\n';i++)
    {
//如果当前字符srt[i] == 要更改的字符s就更改成#
        if(str[i]==s) str[i]='#';
    }
      printf("%s",str);
    return 0;
}

 6.字符串插入

有两个不包含空白字符的字符串 str 和 substr,str 的字符个数不超过 10,substr 的字符个数为 3。(字符个数不包括字符串结尾处的 \0。)

将 substr 插入到 str 中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式

输入包括若干行,每一行为一组测试数据,格式为

str substr

输出格式

对于每一组测试数据,输出插入之后的字符串。

输入样例:
abcab eee
12343 555
输出样例:
abceeeab
12345553

参考代码:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    string s1,s2;
    while(cin>>s1>>s2)
    {
        int p=0;
       for(int i=1;i<s1.size();i++)
       {
//p用来保存字符串s1 ASCII码最大字符的下标。
          if(s1[i]>s1[p]) p=i;
       }
//substr(起始位置下标,想要截取到的位置下标+1)截取起始位置-截取到位置的字符串
       cout<<s1.substr(0,p+1)+s2+s1.substr(p+1)<<endl;
    }
    return 0;
}

 7.只出现一次的字符

给你一个只包含小写字母的字符串。

请你判断是否存在只在字符串中出现过一次的字符。

如果存在,则输出满足条件的字符中位置最靠前的那个。

如果没有,输出 no

输入格式

共一行,包含一个由小写字母构成的字符串。

数据保证字符串的长度不超过 100000。

输出格式

输出满足条件的第一个字符。

如果没有,则输出 no

输入样例:
abceabcd
输出样例:
e

 参考代码:
 

//如果在全局定义的数组那么默认所有元素都为为0,在局部定义的数组如果不初始化默认元素为随机值。
#include <iostream>
#include <cstring>
using namespace std;
//将字符串数组a定义在全局中
char a[100010];
int s[26];
int main()
{
    cin>>a;

    for(int i=0;a[i];i++)
    {
//字符a-z 减去a后变成数子0-25
//统计每个字符出现的次数
        s[a[i]-'a']++;
    }
    for(int i=0;a[i];i++)
    {
        if(s[a[i]-'a']==1) 
        {
        cout<<a[i]<<endl;
        return 0;
        }
    }
    cout<<"no"<<endl;
    return 0;
}

 8.字符串匹配

给定两个长度相同的字符串 a 和字符串 b。

如果在某个位置 i上,满足字符串 a 上的字符 a[i] 和字符串 b 上的字符 b[i]相同,那么这个位置上的字符就是匹配的。

如果两个字符串的匹配位置的数量与字符串总长度的比值大于或等于 k,则称两个字符串是匹配的。

现在请你判断给定的两个字符串是否匹配。

输入格式

第一行包含一个浮点数 k,第二行包含字符串 a,第三行包含字符串 b。

输入的字符串中不包含空格。

输出格式

如果两个字符串匹配,则输出 yes

否则,输出 no

数据范围

0≤k≤10,
字符串的长度不超过 100。

输入样例:
0.4
abcde
xbacd
输出样例:
no

 参考代码:

#include <iostream>
using namespace std;
int main()
{
    string a,b;
    double k;
    cin>>k>>a>>b;
    int count=0;
//string类型的变量 变量名字.size():获得变量的长度。
    for(int i=0;i<a.size();i++)
    {
        if(a[i]==b[i]) count++;
    }
    if((double)count/a.size()>=k) cout<<"yes";
    else cout<<"no";
    return 0;
}

 9.忽略大小写比较字符串大小

一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。

如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准;如果两字符串长度不同,但所有相同位置的字符均相同,则认为较长字符串更大。

在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hello 和 hello 在忽略字母大小写时是相等的。

请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。

输入格式

输入为两行,每行一个字符串,共两个字符串。

注意字符串中仅可能包含大小写字母和空格。

输出格式

如果第一个字符串比第二个字符串小,输出一个字符 <

如果第一个字符串比第二个字符串大,输出一个字符 >

如果两个字符串相等,输出一个字符 =

数据范围

每个字符串的长度范围 [1,80][1,80]。

输入样例1:
Hello
hello
输出样例1:
=
输入样例2:
How are you
How old are you
输出样例2:
<

参考代码:

题意将两个字符串进行不区分大小写的比较,因为小写字母-32就是它对应的大写字母。

可以都转换成大写字母来计算。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
   char a[101],b[101];
   
   fgets(a,101,stdin);
   fgets(b,101,stdin);
//先判断最后一个字符是否为换行符,若是的话改成0,因为后续要对每个字符小写转大写
   if(a[strlen(a)-1]=='\n') a[strlen(a)-1]=0;
    if(b[strlen(b)-1]=='\n') b[strlen(b)-1]=0;
    for(int i=0;a[i];i++)
    {
        if(a[i]>='a' && a[i]<='z')
        a[i]-=32;
    }
    for(int i=0;b[i];i++)
    {
        if(b[i]>='a' && b[i]<='z')
        b[i]-=32;
    }
    if(strcmp(a,b)==0) printf("=");
    else if(strcmp(a,b)<0) printf("<");
    else printf(">");
    return 0;
}

10.去掉多余的空格

输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。

输入格式

共一行,包含一个字符串。

输出格式

输出去掉多余空格后的字符串,占一行。

数据范围

输入字符串的长度不超过 200。
保证输入字符串的开头和结尾没有空格。

输入样例:
Hello      world.This is    c language.
输出样例:
Hello world.This is c language.

参考代码:

#include <iostream>
using namespace std;
int main()
{
    string a;
//因为cout输出每次遇到空格就会停止,所以每次输入完一个完整的单词要输入空格的时候
//会自动停止输入并且输出已经输入的字符,再加一个空格就好。
   while(cin>>a) cout<<a<<' ';
    return 0;
}

 11.信息加密

在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。

现在给定一个字符串,对其进行加密处理。

加密的规则如下:

  1. 字符串中的小写字母,a 加密为 b,b 加密为 c,…,y 加密为 z,z 加密为 a。
  2. 字符串中的大写字母,A 加密为 B,B 加密为 C,…,Y 加密为 Z,Z加密为 A。
  3. 字符串中的其他字符,不作处理。

请你输出加密后的字符串。

输入格式

共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式

输出加密后的字符串。

数据范围

输入字符串的长度不超过 100。

输入样例:
Hello! How are you!
输出样例:
Ifmmp! Ipx bsf zpv!

参考代码:

#include <iostream>
using namespace std;
int main()
{
    string a;
    getline(cin,a);
    for(int i=0;a[i];i++)
    {
        if(a[i]>='a' && a[i]<='z')
//因为每个单词都往后平移,但z平移到a相当于a-z或A-Z组成一个圆环,每个一次往后平移
//可以用当前字符-a或A(转换成数字)+1 后在%26得到平移后的字符。
        a[i]=(a[i]-'a'+1)%26+'a';
       else if(a[i]>='A' && a[i]<='Z')
        a[i]=(a[i]-'A'+1)%26+'A';
    }
    cout<<a;
    return 0;
}

12.输出字符串

 

给定一个字符串 a,请你按照下面的要求输出字符串 b。

给定字符串 a 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 b 的第一个字符;

给定字符串 a 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 b 的第二个字符;

给定字符串 a 的倒数第二个字符的 ASCII 值加最后一个字符的 ASCII 值,得到 b 的倒数第二个字符;

给定字符串 a 的最后一个字符的 ASCII 值加第一个字符的 ASCII 值,得到 b 的最后一个字符。

输入格式

输入共一行,包含字符串 a。注意字符串中可能包含空格。

数据保证字符串内的字符的 ASCII 值均不超过 63。

输出格式

输出共一行,包含字符串 b。

数据范围

2≤a的长度≤100

输入样例:
1 2 3
输出样例:
QRRSd

 参考代码:

#include <iostream>
using namespace std;
int main()
{
    string a,b;
//因为包含空格,所以用getline(cin,字符串名)来读取
    getline(cin,a);
//相当于首字符-尾端连起来组成一个圆环,每个字符变成加后面一个字符ASCII码的值。
    for(int i=0;i<a.size();i++) b+=(char)a[i]+a[(i+1)%a.size()];
    cout<<b;
    return 0;
}

13.单词替换

输入一个字符串,以回车结束(字符串长度不超过 100)。

该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。

现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入格式

输入共 3行。

第 1 行是包含多个单词的字符串 s;

第 2 行是待替换的单词 a(长度不超过 100);

第 3行是 a 将被替换的单词 b(长度不超过 100)。

输出格式

共一行,输出将 s中所有单词 a 替换成 b 之后的字符串。

输入样例:
You want someone to help you
You
I
输出样例:
I want someone to help you

 参考代码:

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
     string s,a,b;
//因为s中读取包含空格所以用getline()
     getline(cin,s);
     cin>>a>>b;
//先将s保存在数据流ssin中
     stringstream ssin(s);
     string str;
//再将s依次读入到str
     while(ssin >> str) 
     if(str==a) cout<<b<<' ';
     else cout<<str<<' ';
    return 0;
}

 *14.字符串中最长的连续出现的字符

求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tab),如果这样的字符不止一个,则输出第一个。

输入格式

第一行输入整数 N,表示测试数据的组数。

每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过 200。

输出格式

共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。

输入样例:
2
aaaaabbbbbcccccccdddddddddd
abcdefghigk
输出样例:
d 10
a 1

 参考代码:

#include <iostream>
using namespace std;
int main()
{
  int n=0;
  cin>>n;
                    
  while(n--)
  {
        string s; 
      cin>>s;
      int count=0; char c;
      for(int i=0;i<s.size();i++)
      {
          int j=i;
          while(j<s.size()  && s[i]==s[j]) j++;
          if(j-i>count) 
          {
              count=j-i;
              c=s[i];
          }
          i=j-1;
      }
      cout<<c<<' '<<count<<endl;
  }
    return 0;
}

 15.最长单词

一个以 . 结尾的简单英文句子,单词之间用单个空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。

输入格式

输入一行字符串,表示这个简单英文句子,长度不超过 500。

输出格式

该句子中最长的单词。如果多于一个,则输出第一个。

输入样例:
I am a student of Peking University.
输出样例:
University

 参考代码:

#include <iostream>
using namespace std;
int main()
{
    string str,rea;
    while(cin>>str)
    {
//将每次读取的单词当作一个字符进行判断
//若为.则删除,然后每次比较新读取的和之前存的最长字符串的长度。

        if(str.back()=='.') str.pop_back();
        if(str.size()>rea.size()) rea=str;
    }
    cout<<rea<<endl;
    return 0;
}

 16.倒排单词

编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。

输入格式

输入为一个字符串(字符串长度至多为 100)。

输出格式

输出为按要求排序后的字符串。

输入样例:
I am a student
输出样例:
student a am I

 参考代码:

#include <iostream>
using namespace std;
int main()
{
开一个string数组,每个元素都是sring类型。
    string s[100];
    int n=0;
//将每个单词当作一个字符串读入
    while(cin>>s[n]) n++;
//倒着输出每个字符
    for(int i=n-1;i>=0;i--)
    {
        cout<<s[i]<<' ';
    }
    return 0;
}

*17.字符串移位包含问题

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串 s1 和 s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。

例如 CDAA 是由 AABCD 两次移位后产生的新串 BCDAA 的子串,而 ABCD 与 ACBD 则不能通过多次移位来得到其中一个字符串是新串的子串。

输入格式

共一行,包含两个字符串,中间由单个空格隔开。

字符串只包含字母和数字,长度不超过 30。

输出格式

如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出 true,否则输出 false

输入样例:
AABCD CDAA
输出样例:
true

 参考代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    string a,b;
    cin>>a>>b;
    if(a.size()<b.size()) swap(a,b);
    for(int i=0;i<a.size();i++)
    {
        a=a.substr(1)+a[0];
        for(int j=0;j+b.size()<=a.size();j++)
        {
            int k=0;
            for(;k<b.size();k++)
                if(a[j+k]!=b[k])
                   break;
                   if(k==b.size())
                   {
                       puts("true");
                       return 0;
                   }
        }
    }
    puts("false");
    return 0;
}

 *18.字符串乘方

给定两个字符串 a和 b,我们定义 a×b 为他们的连接。

例如,如果 a=abc 而 b=def, 则 a×b=abcdef

输入格式

输入包含不超过 1010 组测试样例,每组测试样例占一行。

每组样例包含一个由小写字母构成的字符串 s,s 的长度不超过 100,且不包含空格。

最后的测试样例后面将是一个点号作为一行。

输出格式

对于每一个 s,你需要输出最大的 n,使得存在一个字符串 a,让 s=a^n。

输入样例:
abcd
aaaa
ababab
.
输出样例:
1
4
3

参考代码:

#include <iostream>
using namespace std;
int main()
{
    string str;
    while(cin>>str,str!=".")
    {
        int len=str.size();
        for(int n=len;n;n--)
        {
            int m=len/n;
            string s=str.substr(0,m);
            string r;
            for(int j=0;j<n;j++)  r+=s;
            if(r==str) 
            {
                cout<<n<<endl;
                break;
            }
        }
    }
    return 0;
}

 *19.字符串最大跨距

有三个字符串 S,S1,S2,其中,S 长度不超过 300300,S1 和 S2 的长度不超过 10。

现在,我们想要检测 S1 和 S2是否同时在 S 中出现,且 S1 位于 S2 的左边,并在 S 中互不交叉(即,S1的右边界点在 S2 的左边界点的左侧)。

计算满足上述条件的最大跨距(即,最大间隔距离:最右边的 S2 的起始点与最左边的 S1 的终止点之间的字符数目)。

如果没有满足条件的 S1,S2存在,则输出 −1。

例如,S=�= abcd123ab888efghij45ef67kl, S1= ab, S2= ef,其中,S1 在 S 中出现了 2次,S2也在 S中出现了 2次,最大跨距为:18。

输入格式

输入共一行,包含三个字符串 S,S1,S2,字符串之间用逗号隔开。

数据保证三个字符串中不含空格和逗号。

输出格式

输出一个整数,表示最大跨距。

如果没有满足条件的 S1和 S2 存在,则输出 −1。

输入样例:
abcd123ab888efghij45ef67kl,ab,ef
输出样例:
18

参考代码:

#include <iostream>
using namespace std;
int main()
{
    string s,s1,s2;
    char c;
    while(cin>>c,c!=',') s+=c;
    while(cin>>c,c!=',') s1+=c;
    while(cin>>c) s2+=c;
    if(s.size()<s1.size() || s.size()<s2.size()) puts("-1");
    else
    {
        int l=0;
        while(l+s1.size()<=s.size())
        {
            int k=0;
            while(k<s1.size())
            {
                if(s[l+k]!=s1[k]) break;
                k++;
            }
            if(k==s1.size()) break;
            l++;
        }
        int r=s.size()-s2.size();
        while(r+s2.size()<=s.size())
        {
            int k=0;
            while(k<s2.size())
            {
                if(s[r+k]!=s2[k]) break;
                k++;
            }
            if(k==s2.size()) break;
            r--;
        }
        l+=s1.size()-1;
        if(l>=r) puts("-1");
        else printf("%d",r-l-1);
    }
    return 0;
}

*20. 最长公共字符串后缀

给出若干个字符串,输出这些字符串的最长公共后缀。

输入格式

由不超过 5 组输入组成。

每组输入的第一行是一个整数 N。

N 为 0 时表示输入结束,否则后面会继续有 N 行输入,每行是一个字符串(字符串内不含空白符)。

每个字符串的长度不超过 200。

输出格式

每组数据输出一行结果,为 N 个字符串的最长公共后缀(可能为空)。

数据范围

1≤N≤200

输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
ba

a

参考代码: 

#include <iostream>
using namespace std;
const int N=200;
int n;
string str[N];
int main()
{
    while(cin>>n,n)
    {
        int len=1000;
        for(int i=0;i<n;i++)
        {
            cin>>str[i];
            if(len>str[i].size()) len=str[i].size();
        }
    while(len)
    {
        bool success=true;
        for(int i=1;i<n;i++)
        {
            bool is_same=true;
            for(int j=1;j<=len;j++)
                if(str[0][str[0].size()-j]!=str[i][str[i].size()-j])
                {
                    is_same=false;
                    break;
                }
                if(!is_same)
                {
                    success=false;
                    break;
                }
       }
            if(success) break;
            len--;
    }
        cout<<str[0].substr(str[0].size()-len)<<endl;
    }
    return 0;
}

 

                                         函数

1.n的阶乘

输入一个整数 n,请你编写一个函数,int fact(int n),计算并输出 n 的阶乘。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数表示 n 的阶乘的值。

数据范围

1≤n≤10

输入样例:
3
输出样例:
6

参考代码:

 

#include <iostream>
using namespace std;

int fact(int n)
{
//递归函数自己调用自己
    if(n==1) return 1;
    return n*fact(n-1);
}

int main()
{
    int n;
    cin>>n;
    cout<<fact(n)<<endl;
    return 0;
}

 2.x和y的最大值 

输入两个整数 x 和 y,请你编写一个函数,int max(int x, int y),计算并输出 x 和 y的最大值。

输入格式

共一行,包含两个整数 x 和 y。

输出格式

共一行,包含一个整数,表示两个数中较大的那个数。

数据范围

−100≤x,y≤100

输入样例:
3 6
输出样例:
6

参考代码: 

#include <iostream>
using namespace std;

int max(int a,int b)
{
    if(a>b) return a;
    return b;
}

int main()
{
    int a,b;
    cin>>a>>b;
    cout<<max(a,b);
    return 0;
}

3.最大公约数

 输入两个整数 a 和 b,请你编写一个函数,int gcd(int a, int b), 计算并输出 a 和 b 的最大公约数。

输入格式

共一行,包含两个整数 a 和 b。

输出格式

共一行,包含一个整数,表示 a和 b 的最大公约数。

数据范围

1≤a,b≤1000

输入样例:
12 16
输出样例:
4

参考代码:

#include <iostream>
using namespace std;

int gcd(int a,int b)
//辗转相除法
{
   return b ? gcd(b,a%b) : a;
}

int main()
{
    int a,b;
    cin>>a>>b;
    cout<<gcd(a,b);
    return 0;
}

 4.交换数值

输入两个整数 x和 y,请你编写一个函数, 交换两个整数的数值并输出交换后的 x 和 y。

C++中的格式为:void swap(int &x, int &y)

Java中的格式为:void swap(int[] a),交换a[0]a[1]

输入格式

共一行,包含两个整数 x和 y。

输出格式

共一行,包含交换后的 x 和 y。

数据范围

1≤x,y≤100

输入样例:
3 5
输出样例:
5 3

参考代码:

#include <iostream>
using namespace std;

void swap(int &a,int &b)
{
    
        int t=a;
        a=b;
        b=t;
}

int main()
{
    int a,b;
    cin>>a>>b;
    swap(a,b);
    cout<<a<<' '<<b;
    return 0;
}

 5.打印数字

输入一个长度为 n 的数组 a 和一个整数 size,请你编写一个函数, void print(int a[], int size), 打印数组 a中的前 size 个数。

注意:对于Python语言,print是内置函数,所以本题中使用print1D()这个函数名,来避免跟内置函数产生冲突。

输入格式

第一行包含两个整数 n 和 size。

第二行包含 n 个整数 a[i],表示整个数组。

输出格式

共一行,包含 size个整数,表示数组的前 size 个数。

数据范围

1≤n≤1000,
1≤size≤n

输入样例:
5 3
1 2 3 4 5
输出样例:
1 2 3

参考代码:

#include <iostream>
using namespace std;

int a[1000];

void size(int m)
{
    for(int i=0;i<m;i++)
    {
        cout<<a[i]<<" ";
    }
}
int main()
{
    int n ,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    size(m);
    return 0;
}

 6.打印矩阵

给定一个 row×col 的二维数组 a,请你编写一个函数,void print2D(int a[][N], int row, int col),打印数组构成的 row 行,col列的矩阵。

注意,每打印完一整行需要输出一个回车。

输入格式

第一行包含两个整数 row,col。

接下来 row行,每行包含 col 个整数,表示完整二维数组 a。

输出格式

共 row 行,每行 col 个整数,表示打印出的矩阵。

数据范围

1≤row≤100,
1≤col≤100

输入样例:
3 4
1 3 4 5
2 6 9 4
1 4 7 5
输出样例:
1 3 4 5
2 6 9 4
1 4 7 5

参考代码:

#include <iostream>
using namespace std;
int a[100][100];
void print(int n,int m)
{
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<m;j++)
    {
    cout<<a[i][j]<<' ';
    }
    cout<<endl;
    }
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    print(n,m);
    return 0;
}

 7.递归求阶乘

请使用递归的方式求 n的阶乘。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示 n的阶乘的值。

数据范围

1≤n≤10

输入样例:
3
输出样例:
6

参考代码:

#include <iostream>
using namespace std;

int fun(int n)
{
    if(n==1) return 1;
    return n*fun(n-1);
}

int main()
{
    int n;
    cin>>n;
    cout<<fun(n);
    return 0;
}

 8. 递归求斐波那契数列

请使用递归的方式求斐波那契数列的第 n项,下标从1开始。

斐波那契数列:1,1,2,3,5…,这个数列从第 3 项开始,每一项都等于前两项之和

输入格式

共一行,包含整数 n。

输出格式

共一行,包含一个整数,表示斐波那契数列的第 n项。

数据范围

1≤n≤30

输入样例:
4
输出样例:
3

参考代码:

#include <iostream>
using namespace std;

int fub(int n)
{
    if(n<=2) return 1;
    return fub(n-1)+fub(n-2);
}

int main()
{
    int n;
    cin>>n;
    cout<<fub(n);
    return 0;
}

9.绝对值

 

输入一个整数 x,请你编写一个函数,int abs(int x),输出 x 的绝对值。

输入格式

共一行,包含一个整数 x。

输出格式

共一行,包含 x的绝对值。

数据范围

−100≤x≤100

输入样例:
-3
输出样例:
3

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<abs(n)<<endl;
    return 0;
}

 10.两个数的和

输入两个浮点数 x 和 y,请你编写一个函数,double add(double x, double y),计算并输出 x与 y 的和。

输入格式

共一行,包含两个浮点数 x 和 y。

输出格式

共一行,包含一个浮点数,表示两个数的和,结果保留 2 位小数。

数据范围

−1000≤x,y≤1000

输入样例:
1.11 2.22
输出样例:
3.33

 参考代码:

#include <cstdio>
double add(double a,double b)
{
    return a+b;
}
int main()
{
    double a,b;
    scanf("%lf %lf",&a ,&b);
    printf("%.2lf",add(a,b));
    return 0;
}

 11.区间求和

输入两个整数 l 和 r,请你编写一个函数,int sum(int l, int r),计算并输出区间 [l,r]内所有整数的和。

输入格式

共一行,包含两个整数 l 和 r。

输出格式

共一行,包含一个整数,表示所求的和。

数据范围

1≤l≤r≤1000

输入样例:
3 5
输出样例:
12

参考代码:

#include <iostream>
using namespace std;

int add(int n,int m)
{
    int sum=0;
    for(int i=n;i<=m;i++)
    {
        sum+=i;
    }
    return sum;
}

int main()
{
    int n,m; cin>>n>>m;
    cout<<add(n,m);
    return 0;
}

 12.最小公倍数

输入两个整数 a 和 b,请你编写一个函数,int lcm(int a, int b),计算并输出 a 和 b 的最小公倍数。

输入格式

共一行,包含两个整数 a和 b。

输出格式

共一行,包含一个整数,表示 a 和 b的最小公倍数。

数据范围

1≤a,b≤1000

输入样例:
6 8
输出样例:
24

 参考代码:

#include <iostream>
using namespace std;
int gcd(int a,int b)
{
    return b ? gcd(b,a%b) : a;
}
int main()
{
    int n,m;
    cin>>n>>m;
//n和m最小公倍数=n*m / n和m的最大公约数。
    cout<<(n*m)/gcd(n,m);
    return 0;
}

 13.复制数组

给定两个数组 a 和 b 以及一个整数 size,请你编写一个函数,void copy(int a[], int b[], int size),将 a 数组中的前 size个数字,复制到 b 数组中。

复制完成后,输出 b 数组。

输入格式

第一行包含整数 n,m,size,分别表示 a 数组的长度,b数组的长度以及整数 size。

第二行包含 n 个整数,表示数组 a。

第三行包含 m 个整数,表示数组 b。

输出格式

共一行,包含 m 个整数,表示复制完成后的数组 b。

数据范围

1≤n≤m≤100,
1≤size≤n

输入样例:
3 5 2
1 2 3
4 5 6 7 8
输出样例:
1 2 6 7 8

参考代码:

 

#include <iostream>
using namespace std;
//题中的复制可以理解为将b的前n和更换为a的前n个数。
void copy(int a[],int b[],int size,int m)
{
    for(int i=0;i<size;i++) b[i]=a[i];
     for(int i=0;i<m;i++) cout<<b[i]<<' ';
}

int main()
{
    int n,m,size;
    cin>>n>>m>>size;
    int a[n],b[m];
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<m;i++) cin>>b[i];
    copy(a,b,size,m);
    return 0;
}

14.打印字符串

给定一个字符串,请你编写一个函数,void print(char str[]),将这个字符串打印出来。

注意:对于Python语言,print是内置函数,所以本题中使用print_str()这个函数名,来避免跟内置函数产生冲突。

输入格式

共一行,包含一个字符串。

输出格式

共一行,表示打印出的字符串。

数据范围

1≤字符串长度≤100

输入样例:
I love C++.
输出样例:
I love C++.

参考代码: 

#include <iostream>
using namespace std;

void print(string s)
{
    cout<<s;
}
int main()
{
    string s;
//因为可能包含空格所以用getline(cin,字符串名)
    getline(cin,s);
    print(s);
    return 0;
}

 15.数组翻转

给定一个长度为 n 的数组 a 和一个整数 size,请你编写一个函数,void reverse(int a[], int size),实现将数组 a 中的前 size 个数翻转。

输出翻转后的数组 a。

输入格式

第一行包含两个整数 n和 size。

第二行包含 n个整数,表示数组 a。

输出格式

共一行,包含 n 个整数,表示翻转后的数组 a。

数据范围

1≤size≤n≤1000,
1≤a[i]≤1000

输入样例:
5 3
1 2 3 4 5
输出样例:
3 2 1 4 5

参考代码:

#include <iostream>
using namespace std;
//相当于把12345变成54321
//此函数将1和5,2和4进行交换。
void reserve(int a[],int size)
{
    for(int i=0,j=size-1;i<j;i++,j--)
    swap(a[i],a[j]);
}
int main()
{
    int n,size;
    cin>>n>>size;
    int a[1000];
    for(int i=0;i<n;i++) cin>>a[i];
     reserve(a,size);
     for(int i=0;i<n;i++) cout<<a[i]<<' ';
    return 0;
}

 16.数组去重

给定一个长度为 n 的数组 a,请你编写一个函数:

int get_unique_count(int a[], int n);  // 返回数组前n个数中的不同数的个数
输入格式

第一行包含一个整数 n。

第二行包含 n 个整数,表示数组 a。

输出格式

共一行,包含一个整数表示数组中不同数的个数。

数据范围

1≤n≤1000,
1≤ai≤1000。

输入样例:
5
1 1 2 4 5
输出样例:
4

参考代码:

#include <iostream>
#include <algorithm>
using namespace std;

//排序玩的数组,依次遍历,找相邻两数是否不等
//不等则k++(k用来记录不相等的数量)
int fun(int a[],int n)
{
    int k=1;
    for(int i=1;i<n;i++)
    {
        if(a[i]!=a[k-1])
            a[k++]=a[i];
    }
    return k;
}
int main()
{
    int n;
    cin>>n;
    int a[1000];
    for(int i=0;i<n;i++) cin>>a[i];
//sort(数组名,数组名+数组长度)将数组从小打到排序的函数。
    sort(a,a+n);
    cout<<fun(a,n);
    return 0;
}

 17.数组排序

给定一个长度为 n 的数组 a 以及两个整数 l 和 r,请你编写一个函数,void sort(int a[], int l, int r),将 a[l]∼a[r] 从小到大排序。

输出排好序的数组 a。

输入格式

第一行包含三个整数 n,l,r。

第二行包含 n 个整数,表示数组 a。

输出格式

共一行,包含 n 个整数,表示排序完成后的数组 a。

数据范围

0≤l≤r<n≤1000

输入样例:
5 2 4
4 5 1 3 2
输出样例:
4 5 1 2 3

 参考代码:

#include <iostream>
using namespace std;

void sort(int a[],int l,int r)
{
//冒泡排序:
    for(int i=l;i<=r;i++)
    {
        for(int j=i+1;j<=r;j++)
        {
            if(a[i]>a[j])
            {
              swap(a[i],a[j]);
            }
        }
    }
}
int main()
{
    int a[1000];
    int n,l,r;
    cin>>n>>l>>r;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,l,r);
    for(int i=0;i<n;i++) cout<<a[i]<<' ';
    return 0;
}

 *18.跳台阶

一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第 n 级台阶一共有多少种方案。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示方案数。

数据范围

1≤n≤15

输入样例:
5
输出样例:
8

参考代码:

#include <iostream>

using namespace std;
int n;
int ans;

void fun(int k)
{
    if(k==n) ans++;
    else if(k<n)
    {
        fun(k+1);
        fun(k+2);
    }
}
int main()
{
    cin>>n;
    fun(0);
    cout<<ans;
    return 0;
}

19. 走方格

给定一个 n×m 的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)一共有多少种不同的走法。

输入格式

共一行,包含两个整数 n 和 m。

输出格式

共一行,包含一个整数,表示走法数量。

数据范围

1≤n,m≤10

输入样例:
2 3
输出样例:
10

参考代码:

#include <iostream>
using namespace std;
int ans;
int n,m;

void fun(int a,int b)
{
    if(a==n && b==m) ans++;
    else  
    {
//每一步有两种走法:向下或向右
//但每次需要判断是否越界
       if(a<n) fun(a+1,b);
       if(b<m) fun(a,b+1);
    }
}
int main()
{
   cin>>n>>m;
   fun(0,0);
   cout<<ans;
    return 0;
}

*20.排列(DFS)

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数 n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤9

输入样例:
3
输出样例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

参考代码:

#include <iostream>
using namespace std;

const int N=10;
int n;

void dfs(int u,int nums[],bool st[])
{
    if(u>n) 
    {
        for(int i=1;i<=n;i++) cout<<nums[i]<<' ';
        cout<<endl;
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            if(!st[i])
            {
                st[i]=true;
                nums[u]=i;
                dfs(u+1,nums,st);
                st[i]=false;
            }
        }
    }
}
int main()
{
    cin>>n;
    int nums[N];
    bool st[N]={0};
    dfs(1,nums,st);
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1915474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024学生党蓝牙耳机什么牌子好?品牌高性价比蓝牙耳机推荐

2024年&#xff0c;对于追求性价比和品质的学生党来说&#xff0c;选择一款合适的蓝牙耳机是提升学习和生活品质的重要一环。面对市场上琳琅满目的蓝牙耳机产品&#xff0c;2024学生党蓝牙耳机什么牌子好&#xff1f;如何找到既满足音质需求又具备高性价比的款式呢&#xff1f;…

Odoo免费开源ERP如何处理汽车零部件企业的OE编码问题

业务背景 汽车零部件企业在每个汽配零件都有OE编号&#xff0c;即原厂编号&#xff0c;Original Equipment Number。一个配件&#xff0c;可能可以在多个车型上使用&#xff0c;对应的&#xff0c;就有多个可兼容的OE编号。 客户下单时候&#xff0c;直接报OE编号&#xff0c…

MT3054 搭积木

1.思路&#xff1a; 把二维矩阵转化成一维编号&#xff0c;之后将编号使用并查集&#xff0c;看最后是否在同一个集合中即可。 2.代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e3 10; int n, m, cnt, root; int fa[N * N]; int dx[…

[机器学习]-人工智能对程序员的深远影响——案例分析

机器学习和人工智能对未来程序员的深远影响 目录 机器学习和人工智能对未来程序员的深远影响1. **自动化编码任务**1.1 代码生成1.2 自动调试1.3 测试自动化 2. **提升开发效率**2.1 智能建议2.2 项目管理 3. **改变编程范式**3.1 数据驱动开发 4. **职业发展的新机遇**4.1 AI工…

【代码随想录】【算法训练营】【第63天】 [卡码53]寻宝

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 63&#xff0c;周二&#xff0c;ding~ 题目详情 [卡码53] 寻宝 题目描述 卡码53 寻宝 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 prim算法 kruskal…

UDP协议介绍和作用

什么是UDP? UDP是User Datagram Protocol的简称&#xff0c;中文名是用户数据报协议&#xff0c;是OSI参考模型中的传输层协议&#xff0c;它是一种无连接的传输层协议&#xff0c;提供面向事务的简单不可靠信息传送服务。 UDP的正式规范是IETF RFC768。UDP在IP报文的协议号是…

java数组之线性查找、二分法查找

一、线性查找 思想&#xff1a;如果想在一个数组中查找是否有某个元素&#xff0c;最容易想到的办法就是遍历数组&#xff0c;将数组中元素与想要查找的元素逐个对比&#xff0c;如果相等表示找到了&#xff0c;如果不等&#xff0c;则表示没找到。这就是线性查找的思想。 案例…

Chat2DB:AI引领下的全链路数据库管理新纪元

一、引言 随着数据驱动决策成为现代企业和组织的核心竞争力&#xff0c;数据库管理工具的重要性日益凸显。然而&#xff0c;传统的数据库管理工具往往存在操作复杂、功能单一、不支持多类型数据库管理等问题&#xff0c;限制了数据的有效利用。为了打破这一局面&#xff0c;Ch…

东方通Tongweb发布vue前端

一、前端包中添加文件 1、解压vue打包文件 以dist.zip为例&#xff0c;解压之后得到dist文件夹&#xff0c;进入dist文件夹&#xff0c;新建WEB-INF文件夹&#xff0c;进入WEB-INF文件夹&#xff0c;新建web.xml文件&#xff0c; 打开web.xml文件&#xff0c;输入以下内容 …

代码随想录算法训练营第四十九天| 647. 回文子串、 516.最长回文子序列

647. 回文子串 题目链接&#xff1a;647. 回文子串 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会 思路&#xff1a; dp[i][j] 表示字符串 s 从索引 i 到索引 j 这一段子串是否为回文子串。 当s[i]与s[j]不相等&#xff0c;那没啥好说的了&#xff0c;dp[i][j]一定是fa…

Chromium编译指南2024 Linux篇-编译Chromium(五)

1.引言 在完成环境配置之后&#xff0c;我们需要开始实际的编译工作。编译 Chromium 是一个相对复杂且耗时的过程&#xff0c;尤其是第一次编译时。为了保证顺利完成&#xff0c;我们将使用 GN 和 Ninja 工具来生成和管理构建文件。接下来&#xff0c;我们会详细介绍如何生成构…

Cesium中实现全球体积云效果的一种方案

原生 Cesium 提供了一种积云的效果&#xff0c;云的物理特征和渲染性能都还不错&#xff0c;这种方案适合表达小范围相对离散的云朵&#xff0c;但是用来实现全球范围下相对连续、柔和渐变的云层比较困难。本文在体渲染的基础上&#xff0c;参考了开源社区中 shadertoy 和 thre…

软件架构之软件架构概述及质量属性

软件架构之软件架构概述及质量属性 第 9 章&#xff1a;软件架构设计9.1 软件架构概述9.1.1 软件架构的定义9.1.2 软件架构的重要性9.1.3 架构的模型 9.2 架构需求与软件质量属性9.2.1 软件质量属性9.2.2 6 个质量属性及实现 第 9 章&#xff1a;软件架构设计 像学写文章一样&…

java通过poi-tl导出word实战详细步骤

文章目录 与其他模版引擎对比1.引入maven依赖包2.新建Word文档exportWprd.docx模版3.编写导出word接口代码4.导出成果 poi-tl是一个基于Apache POI的Word模板引擎&#xff0c;也是一个免费开源的Java类库&#xff0c;你可以非常方便的加入到你的项目中&#xff0c;并且拥有着让…

模板语法之插值语法{{}}——01

<主要研究&#xff1a;{{ 这里可以写什么}} 1.在data中声明的变量函数都可以 2.常量 3.只要是合法的JavaScript的表达式&#xff0c;都可以 4. 模板表达式都被放在沙盒中&#xff0c;只能访问全局变量的一个白名单&#xff0c;如 Math 和 Date <body> <div i…

进程间的通信--管道

文章目录 一、进程通信的介绍1.1进程间为什么需要通信1.2进程如何通信 二、管道2.1匿名管道2.1.1文件描述符理解管道2.1.2接口使用2.1.3管道的4种情况2.1.4管道的五种特征 2.2管道的使用场景2.2.1命令行中的管道2.2.2进程池 2.命名管道2.1.1原理2.2.2接口2.2.3代码实例 一、进程…

网络编程:各协议头(数据报格式)

一、mac头 二、ip头 protocol——tcp/udp &#xff08;7&#xff09;TTL——生存时间 三、tcp头 四、udp头

最新2023年行政区划、路网、土壤质地矢量数据

行政区划矢量数据是指用矢量格式表示的地理信息系统&#xff08;GIS&#xff09;数据&#xff0c;其中包含了行政区域的边界信息&#xff0c;如国家、省份、城市、区县、乡镇甚至村级的界限。这些数据通常以点、线、面的几何图形来表示具体的地理实体&#xff0c;并且每个实体都…

傅里叶级数的3D表示 包括源码

傅里叶级数的3D表示 包括源码 flyfish 傅里叶级数的基本形式 &#xff1a; y ( t ) ∑ n 1 , 3 , 5 , … N 4 A n π sin ⁡ ( n π T t ) y(t) \sum_{n1,3,5,\ldots}^{N} \frac{4A}{n\pi} \sin\left(\frac{n\pi}{T} t\right) y(t)n1,3,5,…∑N​nπ4A​sin(Tnπ​t) 其中&…

python爬虫基础入门

步骤 获取网页内容&#xff1a; http请求 python的Requests库 解析网页内容 html网页结构 python的Beautiful Soup库 储存或分析数据 储存进数据库 作为ai分析的数据 转化为图表显示出来 DDoS攻击 通过给服务器发送海量高频请求&#xff0c;大量消耗网页资源&#…