C++ 基础复习系列 05 (题目汇总)

简介: C++ 基础复习系列 05 (题目汇总)

七、c++例题


冒泡排序

for(int i=0;i<n-1;i++) {
    for (int j=0;j<n-1-i;j++) {
        if(a[j]<a[j+1])
    a[j]^=a[j+1]^=a[j]^=a[j+1]; //相邻元素比较交换
  } 
}


sort



头文件  #include < algorithm > sort函数若没有第三个参数,默认实现的是从小到大 less<数据类型>() //从小到大排序 greater<数据类型>() //从大到小排序 利用sort函数实现对字符的排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
 char a[11]="asdfghjklk";
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 sort(a,a+10,greater<char>());
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}


10转16进制


#include<iostream>using namespace std;
char exchange(int n){     
    switch(n){     
        case 0:    return '0';break;
      case 1:    return '1';break;
    case 2:    return '2';break;
        case 3:    return '3';break;
        case 4:    return '4';break;
        case 5:    return '5';break;
    case 6:    return '6';break;
    case 7:    return '7';break;
        case 8:   return '8';break;
        case 9:  return '9';break;
        case 10: return 'A';break;
    case 11:return 'B';break;
        case 12:return 'C';break;
        case 13:return 'D';break;
        case 14: return 'E';break;
        case 15:return 'F';break;}}
int main(){
int m,note,i=0,s=0;
    cin>>m;
    note=m;
    while(m/16!=0){
        i++;  m=m/16;  
    }
  char a[i];
  while(note/16!=0){
        a[s]=exchange(note%16);
        s++;
        note=note/16; 
    }
    a[i]=exchange(note);
    for(int j=i;j>=0;j--){
        cout<<a[j];
    }
    cout<<endl; 
    return 0;
}


原封不动输出:当成字符串 string


#include < iomanip> 要保留n位小数: cout< 宽度设置函数 setw(n) setw()默认的是输出右对齐,而当你想要左对齐时,便需要另外添加setiosflags(ios::left)来实现输出左对齐。 以特殊符号占位,下面就以补 @为例,用特殊符号占位就需要setfill(‘x’)—这里的’x’指的是字符,代码如下:

cout<
  int i; for(i = 2; i <= sqrt(n); i++) {
    if((n % i) == 0) return false;
    } return true;
}


任意整数拿到各个数位的值


#include <iostream>
using namespace std;
void sb(int n){
  if(n>9){
  sb(n/10);       //每次调用时将输入的数最后一位去掉
  cout<<n%10<<" ";     //每次调用都打印出第一位
  }else
  cout<<n<<" ";//直接打印小于10的所有数
  }
int main(){
    int n=0;
    cin>>n; 
  sb(n);
    cout<<endl;
  return 0;
}


闰年判断问题闰年:能被4整除但不能被100整除,或可以被400整除 if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)阶乘


long Fac(int n){
  if (n == 0)
    return 1;
  else
    return n * Fac(n - 1);
 }


输出0~255的二进制数


#include  <iostream>
#include  <bitset>
using namespace std;
int main(){
    bitset<8>b;
    for(int i = 0; i < 256; i++){
        b = i;
        cout<<b<<endl;
    }
    return 0;
}


递归解法


斐波那契数列 int f(int n){ // 1.先写递归结束条件 if(n <= 2){ return 1; } // 2.接着写等价关系式 return f(n-1) + f(n - 2); }


汉诺塔问题


#include <iostream>
using namespace std;
long count = 0;//记录移动的次数
void hanoi(int n,char a,char b,char c) {   //n个盘子,a移动到c,用b做临时塔
      if (1 == n){
          cout<<"第"<<++count<<"次: "<<a<<"塔--->"<<c<<"塔"<<endl;
      }else{
          hanoi(n-1,a,c,b);//递归调用,a移到b,c做临时塔
          cout<<"第"<<++count<<"次: "<<a<<"塔--->"<<c<<"塔"<<endl;
          hanoi(n-1,b,a,c);
       }
}
int main(){
  int n;
  cout<<"输入汉诺塔圆盘的数量: ";
  cin>>n;
  hanoi(n,'A','B','C'); 
  return 0;
}


分鱼问题


#include<iostream>
using namespace std;
int fish(int n, int x){
    if((x-1)%5 == 0){
        if(n == 1)
            return 1;  
        else
            return fish(n-1, (x-1)/5*4); 
    }
    return 0;  //x不是符合题意的解,返回0
}
int main(){
  int i=0, flag=0, x;
  do{   
      i=i+1;
      x=i*5+1;      //x最小值为6,以后每次增加5
    if(fish(5, x)){    //将x传入分鱼递归函数进行检验
        flag=1;  //找到第一个符合题意的x则置标志位为1
        cout<<"五个人合伙捕到的鱼总数为"<<x;
    }
}
  while(!flag);  //未找到符合题意的x,继续循环,否则退出循环
  return 0;
}


描述:输入两个正整数,a和b,求出a/b的结果中小数点后的20位。输入:两个正整数,a和b输出:注意行尾输出回车、注意最后一位数字四舍五入。


#include <iostream>
#include <cmath>
using namespace std;
int main(){
    int a, b, i;
  cin >> a >> b;
  a = a % b;
  for(i = 0; i < 19; i ++){
    a = a * 10;
    cout << a / b;
    a = a - a / b * b;
  }
  a = a * 10;
  i = a / b;
  a = a - a / b * b;
  a = a * 10;
  if(a > 4)
    cout << (i + 1) << endl;
  else
    cout << i << endl;
  return 0;
}


请定义一个结构体以描述学生信息,包括姓名、学号、年龄、性别、 手机号码,其中年龄为 int 型值,性别为 char 型值,其余成员均为长 度小于 20 的字符串(不含空格)。 输入 n(n < 20)及 n 个学生的信息,再输入待查找学生的手机号, 如果找到该学生,输出其信息,各项间用制表符分隔,否则输出 Not Found。


#include <iostream>
#include <string.h> 
using namespace std;
struct student{
    char name[27];
    char no[27];
    int age;
    char gender;
    char phone[27];
}; 
int main(){
    student a[27];
    int  n,i;
    char phone[27];
    cin>>n;
    for(i = 0; i < n; i ++)
    cin >> a[i].name >> a[i].no >> a[i].age >> a[i].gender >> a[i].phone; 
    cin >> phone;
    for(i = 0; i < n; i ++)
    if(!strcmp(a[i].phone, phone)) {
    cout << a[i].name << "\t" << a[i].no << "\t" << a[i].age << "\t" <<     a[i].gender << "\t"<< a[i].phone << endl; 
    return 0; 
    }
    cout << "Not Found" << endl; 
}


请定义一个结构体以描述学生信息,包括姓名、学号、年龄、性别、 手机号码,其中年龄为 int 值,性别为 char 值,其余成员均为长度小 于 20 的字符串(不含空格)。 输入 n(n < 20)及 n 个学生的信息,输出按年龄降序排列后的学 生信息,年龄相等的话,按姓名升序输出。


#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
struct student{
    char name[27];
    char no[27];
    int age;
    char gender;
    char phone[27];
  }a[27]; 
bool cmp(student a, student b) {
    if(a.age == b.age){
    if(strcmp(a.name, b.name) < 0)
        return true;
        else
        return false;
    }
    return a.age > b.age;
    }
    int main(){
    int n, i;
    cin >> n;
    for(i = 0; i < n; i ++) {
    cin >> a[i].name >> a[i].no >> a[i].age >> a[i].gender >> a[i].phone;
    }
    sort(a, a + n, cmp); 
    for(i = 0; i < n; i ++) {
    cout << a[i].name << "\t" << a[i].no << "\t" << a[i].age << "\t" << a[i].gender << "\t" <<
    a[i].phone << endl;
    }
    return 0;
    }


输入今天的年月日,输出昨天的日期。


#include <iostream>
#include <cmath>
using namespace std;
int day[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
bool f(int a) {
if(a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
return true;
return false;
}
int main(){
int y, m, d;
6
cin >> y >> m >> d;
if(d == 1){
if(m == 1)
cout << y-1 << " 12 31" << endl;
else if(m == 3){
if(f(y))
cout << y << " 2 29" << endl; 
else
cout << y << " 2 28" << endl;
}
else
cout << y << " " << m - 1 << " " << day[m-1] << endl;
}
else
cout << y << " " << m << " " << d - 1 << endl; 
return 0;
}


给出相邻两个素数a、b的差值c,请输出a b,其中保证a、b为所有可能的解中最小的。例如,如果输入的c值为2,则应输出3 5回车,而不是5 7回车。注意行尾输出回车。c值小于100,且题目保证一定有解


#include <iostream>
using namespace std;
bool p(int a)
{
  for(int i=2;i<a;i++)
  {
    if(a%i==0)
    return false;
  }
  return true;
}
int main()
{
  int c,x=0;
  cin>>c;
  int a=2,b=3;
for(int i = a;;i ++)
  {
    if(a - b == c)
    {
      cout << b << " " << a << endl;
      return 0;
    }
    if(p(i))
    {
      b = a;
      a = i;
    }
  }
  return 0; 
}


编写程序,计算一个字符串中出现频率最高的字母字符。如果有两个以上的字母出现的次数相同,且同为最高频率,输出字典序小的字母。注意,大写字母的ASCII值小于小写字母。


#include <stdio.h>#include <string.h>#include <iostream>
#include <iomanip>#include <cmath>#include <string.h>
using namespace std;
bool f(char a)
{
if(a >= 'a' && a <= 'z')
     return true;
     return false;
}
bool g(char a)
{
  if(a >= 'A' && a <= 'Z')
     return true;
   return false;
}
int main()
{
  char a[1007];
  int i, b[52] = {0}, max = -1;
  cin.get(a, 1007);
  for(i = 0; a[i]; i ++)
  {
    if(f(a[i]))
    {
      b[a[i] - 'a' + 26] ++;
    }
    else if(g(a[i]))
    {
      b[a[i] - 'A'] ++;
    }
  }
  for(i = 0; i < 52; i ++)
  {
    if(b[i] > max)
      max = b[i];
  }
  for(i = 0; i < 52; i ++){
    if(b[i] == max)
    {
    if(i < 26)
    {
      cout << (char)('A' + i) << endl;
      break;
    }
    else
    {
      cout << (char)('a' + i - 26) << endl;
      break;
    }
  }
}
    return 0;
}


编写程序,计算一个字符串中出现频率最高的字母字符。如果有两个以上的字母出现的次数相同,且同为最高频率,输出在原字符串中最先出现的字母。


#include <stdio.h>#include <string.h>#include <iostream>
#include <iomanip>#include <cmath>#include <string.h>
using namespace std;
bool f(char a)
{
  if(a >= 'a' && a <= 'z')
    return true;
  return false;
}bool g(char a)
{  if(a >= 'A' && a <= 'Z')
return true;
  return false;
}
int main()
{   char a[1007];
  int i, b[52] = {0}, max = -1;
  cin.get(a, 1007);
  for(i = 0; a[i]; i ++)
  {    if(f(a[i]))
    { b[a[i] - 'a' + 26] ++;}
    else if(g(a[i]))
    {b[a[i] - 'A'] ++;}
  }
  for(i = 0; i < 52; i ++)
  {
    if(b[i] > max)  max = b[i];
  }
  for(i = 0; a[i]; i ++)
  {
    if(f(a[i]) && b[a[i] - 'a' + 26] == max)
    {   cout << a[i] << endl;
      break;
    }
    else if(g(a[i]) && b[a[i] - 'A'] == max)
    { cout << a[i] << endl;
      break;  }}  return 0;}



相关文章
|
7天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
13 1
|
2月前
|
监控 C++
【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。
【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。
|
3月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
44 0
|
9月前
|
存储 C++
【C++】二叉搜索树经典OJ题目
二叉搜索树的几道经典OJ面试题
|
5月前
|
机器学习/深度学习 自然语言处理 安全
C++模板元模板(异类词典与policy模板)- - - 题目答案
C++模板元模板(异类词典与policy模板)- - - 题目答案
32 0
|
5月前
|
机器学习/深度学习 自然语言处理 算法
C++模板元模板(异类词典与policy模板)- - - 题目
C++模板元模板(异类词典与policy模板)- - - 题目
38 0
|
5月前
|
存储 测试技术 C++
C++模板元模板实战书籍讲解第一章题目讲解
C++模板元模板实战书籍讲解第一章题目讲解
48 0
C++模板元模板实战书籍讲解第一章题目讲解
|
5月前
|
机器学习/深度学习 设计模式 C++
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
41 0
|
5月前
|
C++
c++力扣题目全排列
c++力扣题目全排列
|
10月前
|
存储 安全 前端开发
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案(下)
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案
481 0

热门文章

最新文章