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

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

image.png

七、基础题目练习与C++例题


基础题目练习


T1: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。


#include <iostream>
using namespace std;
int main() {
  int score;
  cout<<"请输入你的成绩"<<endl;
  cin>>score;
  if (score>=90) {
    cout<<"成绩等级为A"<<endl; 
  } else if(score>=60) {
        cout<<"成绩等级为B"<<endl; 
    } else {
        cout<<"成绩等级为C"<<endl; 
    }
}

T2: 从键盘输入一个大于0的数字保存到int型变量count中,表示int型数组的个数,假设为count,然后从键盘读入count个数字,保存到一个int型数组中,最后,输出数组中所有元素的和及平均值。


 public class T2 {
     public static void main(String[] args) {
         Scanner sc= new Scanner(System.in);
         int count=sc.nextInt();
         int [] array=new int[count];
         for (int i = 0; i <count ; i++) {
             array[i]=sc.nextInt();
         }
         for (int i = 0; i <count ; i++) {
             if(suShu(array[i])){
                 System.out.println(" "+array[i]);
             }
         }
     }
     public static boolean suShu(int s){
         for (int i = 2; i <=s ; i++) {
             if(s%i==0){
                 return false;
             }
         }
         return true;
     }
 }

T3: 输入两个正整数m和n,求其最大公约数和最小公倍数。

 public class T3 {
     public static void main(String args[]){ 
        gcdlcm a =new gcdlcm();
        System.out.println("两数的最大公约数是:"+a.gcd(10, 16));
        System.out.println("两数的最小公倍数是:"+a.lcm(16, 10));
    }        
 }
 class gcdlcm{
     int gcd(int m,int n){
         if(m<n){   //判断数值较大的数
          int temp=n;
          n=m;
          m=temp;            
         }
         if(m%n==0){   
             return n;
         }
           else{
              m%=n;
              return gcd(m,n); 
              }  
     }
     int lcm(int m,int n){
         int i=1;
         if(m<n){   //判断数值较大的数
              int temp=n;
              n=m;
              m=temp;            
             }
         int lcm=m;
         while(lcm%n!=0){
             lcm=m*i;
             i++;
         }
         return lcm;
     }
 }


T4: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:


153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

 public class T4 {
     public static void main(String args[]){ 
        int a,sum;     //表示100~999
        int i,j,k;//分别表示百位、十位、各位
        for(a=100;a<=999;a++){
            i=a/100;
            j=(a-i*100)/10;
            k=a-i*100-j*10;
            sum=i*i*i+j*j*j+k*k*k; 
            //java的运算符,立方要这样写,写成i^3这样,运算不出来
            //如果遇到高次的话可以使用循环算出来
            if(sum==a)
            { System.out.println(sum);
             }
        }

T5: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?


思路:第一个月只有一对兔子,第二个月还是只有一对兔子,第三个月,就有两对了,第四个月3对,第五个月5对,第六个月8对,第七个月是13对,这样规律就出来了。


 public class T5{
     public static void main(String args[]){ 
     //i是表示月份的,这里计算了36个月,也就是三年,兔子的数量
       int i;
       long arr[]=new long[36];   //这个数组时用来计算每月有兔子的对数
       arr[0]=arr[1]=1;
       System.out.println("第1个月有兔子1对"+", "+"总数是"+2);
       System.out.println("第2个月有兔子1对"+", "+"总数是"+2);
       for(i=2;i<=35;i++){
          arr[i]=arr[i-1]+arr[i-2];
          System.out.println("第"+i+"个月有兔子"+arr[i]+"对"+", "+"总数是"+2*arr[i]);
              //规律是 每个数字都是前面两个数字之和
          }
    }
 }

C++常见例题

1、冒泡排序

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]; //相邻元素比较交换
  } 
}

2、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;
}

3、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;
}

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


#include < iomanip> 要保留n位小数: cout<<fixed<<setprecision(n)<<;

#include < iomanip> 宽度设置函数 setw(n)

setw()默认的是输出右对齐,而当你想要左对齐时,便需要另外添加setiosflags(ios::left)来实现输出左对齐。

以特殊符号占位,下面就以补 @为例,用特殊符号占位就需要setfill(‘x’)—这里的’x’指的是字符,代码如下:cout<<setw(6)<<setfill(“@”)<<1234 @@1234

4.判断素数

bool sb(int n) {


int i;

for(i = 2; i <= sqrt(n); i++) {


if((n % i) == 0) return false;


}

return true;


}


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

#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;
}

6、闰年判断问题

闰年:能被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);
 }


7、输出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;
}

8、递归解法


斐波那契数列

int f(int n){

// 1.先写递归结束条件

if(n <= 2){

return 1;

}

// 2.接着写等价关系式

return f(n-1) + f(n - 2);

}


9、汉诺塔问题


#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;
}

10、分鱼问题


#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;}
相关文章
|
23天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
31 1
|
23天前
|
C++
面向对象的C++题目以及解法
面向对象的C++题目以及解法
19 0
|
29天前
|
存储 C++
[c++]类和对象常见题目详解
[c++]类和对象常见题目详解
16 0
|
3月前
|
监控 C++
【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。
【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。
|
4月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
47 0
|
10月前
|
存储 C++
【C++】二叉搜索树经典OJ题目
二叉搜索树的几道经典OJ面试题
|
6月前
|
机器学习/深度学习 自然语言处理 安全
C++模板元模板(异类词典与policy模板)- - - 题目答案
C++模板元模板(异类词典与policy模板)- - - 题目答案
34 0
|
6月前
|
机器学习/深度学习 自然语言处理 算法
C++模板元模板(异类词典与policy模板)- - - 题目
C++模板元模板(异类词典与policy模板)- - - 题目
38 0
|
6月前
|
存储 测试技术 C++
C++模板元模板实战书籍讲解第一章题目讲解
C++模板元模板实战书籍讲解第一章题目讲解
50 0
C++模板元模板实战书籍讲解第一章题目讲解
|
6月前
|
机器学习/深度学习 设计模式 C++
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
45 0