c++题目练习(2)

2022年c/c++语言大学c组E

 

方法一:

#include <iostream>
#include<cstring>
using namespace std;
int main()
{
  int W = 841;
  int L = 1189;
  string str;
  cin >>str;
  int num = str[1]-'0';
  while(num>0){
    L = L/2;
    if(L<W){ 
      int b = L;
      L = W;
      W = b;
    
    }
    num--;
  }
  cout <<L<<"\n" <<W<<endl;
  return 0;
}

swap(a,b) //a和b进行交换

 方法二:

        

#include <iostream>
#include<cstring>
using namespace std;
int main()
{
  char c;int x;
cin >>a >>x;
int a = 1189,b=841;
while(x--){
a/=2;
if(a<b) swap(a,b);
}
  cout << a <<"\n"<<b <<endl;
  return 0;
}

#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{

  string str = "WHERETHEREISAWILLTHEREISAWAY";
  sort(str.begin(),str.end());
  cout <<str<<endl;
  return 0;
}

#include <iostream>

#include <algorithm>
using namespace std;
const int maxn = 1e6+10; 
int a[maxn],b[maxn];
bool cmp(int x,int y)
{
  return b[x] < b[y] || b[x] ==b[y] && x <y;
}
int main()
{
  int n,m;
  cin >>n>>m;
  for(int i=1;i<=n;i++){
    int num = i;
    while(num){
      b[i] += num%10;
      num/=10;
    }
    a[i]=i;
  }
  sort(a+1,a+1+n,cmp); //从小到大排序,如果等于true,就正常排序,如果等于false,则交换位置
  cout <<a[m]<<endl;
  return 0;
}

sort(a,a+10,cmp);

1、第一个参数first:是要排序的数组的起始地址;

2、第二个参数last,是结束的地址(最后一个数据的后一个数据的地址)

3、第三个cmp是排序的方法,可以是从升序也可以是降序。如果第三个参数不屑,则默认的排序 方法是从小到大排序。

cmp相当于一个bool型的函数,当返回的为true时就不交换,返回false时交换。

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

using namespace std;
int main()
{
  string str;
  cin >> str;
  bool is_minus = str[0] =='-';
  if(is_minus)
    str.erase(str.begin());
  reverse(str.begin(),str.end());
  int k =0;
  while(str[k]=='0' && str.size()-k>1)
    k++;
  str=str.substr(k);

  if(is_minus)
    cout << '-';
  cout << str <<endl;  
  return 0;
}


substr()是C++语言函数,
主要功能是复制子字符串,
要求从指定位置开始,
并具有指定的长度。
如果没有指定长度_Count或
_Count+_Off超出了源字符串的长度,
则子字符串将延续到源字符串的结尾。
string,包含s中从pos开始的len个字符的拷贝
(pos的默认值是0,len的默认值是s.size() - pos,
即不加参数会默认拷贝整个s.

1.erase(pos,n);
删除从下标pos开始的n个字符,比如erase(0,1)就是删除第一个字符
2.erase(position);
删除postion处的一个字符(position是一个string类型的迭代器)
3.erase(first,last)
删除从first到last之间的字符(first和last都是迭代器

输入、输出:

 0-670-82162-4

Right

0-670-82162-0

0-670-82162-4

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

int main()
{

  // 请在此输入您的代码
  string str;
  cin >> str;
  int res=0;
  int a = 1;
  for(int i =0;i<str.size()-1;i++)
  {
    if (str[i]!='-')
    {  res += (str[i]-'0')*a;
      a++;}
    else continue;

  }
  int end = res %11;
  if(end==str[12]-'0'||end==10&&str[12]=='X')
    cout << "Right"<<endl;
  else {
    str = str.substr(0,str.size()-1); 
    cout <<str;
    if (end ==10)
      cout  <<'X'<<endl;
    else cout <<end<<endl;
         
      
  }
  return 0;
}

substr作为切片类似于 python的str[1:2],切片末端为 str.size()-1:字符串大小减一

str.back():返回最后一个字符

 2020

gengzi

#include <iostream>
#include <cstring>
using namespace std;
string tg[]={
    "geng","xin","ren","gui","jia",
    "yi","bing","ding","wu","ji"
};
string dz[]={
    "shen","you","xu","hai",
    "zi","chou","yin","mao",
    "chen","si","wu","wei"
};
int main()
{
    int y;
    cin >> y;
    cout <<tg[y%10]<<dz[y%12]<<endl;
}

将2020带入,进行取10和12的模,得到天干的序号,和地支的序号,将他们送到数组中排序。

猜你喜欢

转载自blog.csdn.net/lishijie258/article/details/128264910