C/C++刷题训练营-第七讲

由于有练习C++的需要,所以剩下的题将会提供C语言以及C++的两个参考代码

截止20210330目前更新至BC90

目录

由于有练习C++的需要,所以剩下的题将会提供C语言以及C++的两个参考代码

截止20210330目前更新至BC90

BC140-KiKi设计类继承

C参考代码

C++参考代码

BC139-KiKi定义电子日历类

C参考代码

C++参考代码

BC138-KiKi学结构体和指针

C参考代码

C++参考代码

BC137-KiKi判断上三角矩阵

C参考代码

C++参考代码

BC136-Kiki去重整数并排序

C参考代码

C++参考代码

BC135-KiKi求质数个数

C参考代码

C++参考代码

BC134-KiKi的最高分

C参考代码

C++参考代码

BC133-KiKi说祝福语

C参考代码

C++参考代码

BC132-KiKi算期末成绩

C参考代码

C++参考代码

BC131-KiKi学程序设计基础

C参考代码

C++参考代码

BC130-小乐乐查找数字

C参考代码

C++参考代码

BC129-小乐乐计算函数

C参考代码

C++参考代码

BC128-小乐乐计算求和

C参考代码

C++参考代码

BC127-小乐乐算最高分

C参考代码

C++参考代码

BC126-小乐乐算多少人被请家长

C参考代码

C++参考代码

BC125-小乐乐转换成绩

C参考代码

C++参考代码

BC124-小乐乐是否被叫家长

C参考代码

C++参考代码

BC123-小乐乐找最大数

C参考代码

C++参考代码

BC122-小乐乐算平均分

C参考代码

C++参考代码

BC121-小乐乐学编程

C参考代码

C++参考代码

BC120-小乐乐与二段数

C参考代码

C++参考代码

BC119-小乐乐与字符串

C参考代码

C++参考代码

BC118-小乐乐与序列

C参考代码

C++参考代码

BC117-小乐乐走台阶

C参考代码

C++参考代码

BC116-小乐乐改数字

C参考代码

C++参考代码

BC115-小乐乐与欧几里得

C参考代码

C++参考代码

BC114-小乐乐排电梯

C参考代码

C++参考代码

BC113-小乐乐定闹钟

C参考代码

C++参考代码

BC112-小乐乐求和

C参考代码

C++参考代码

BC111-小乐乐与进制转换

C参考代码

C++参考代码

BC110-井亨棋

C参考代码

C++参考代码

BC109-杨辉三角

C参考代码

C++参考代码

BC108-矩阵交换

C参考代码

C++参考代码

BC107-矩阵转置

C参考代码

C++参考代码

BC106-上三角矩阵判定

C参考代码

C++参考代码

BC105-矩阵相等判定

C参考代码

C++参考代码

BC104-最高身高

C参考代码

C++参考代码

BC103-序列重组矩阵

C参考代码

C++参考代码

BC102-矩阵元素定位

C参考代码

C++参考代码

BC101-班级成绩输入输出

C参考代码

C++参考代码

BC100-有序序列合并

C参考代码

C++参考代码

BC99-序列中整数去重

C参考代码

C++参考代码

BC98-序列中删除指定数字

C参考代码

C++参考代码

BC97-有序序列插入一个整数

C参考代码

C++参考代码

BC96-有序序列判断

C参考代码

C++参考代码

BC95-最高分与最低分之差

C参考代码

C++参考代码

BC94-N个数之和

C参考代码

C++参考代码

BC93-统计数据正负个数

C参考代码

C++参考代码

BC92-逆序输出

C参考代码

C++参考代码

BC91-成绩输入输出问题

C参考代码

C++参考代码

BC90-矩阵计算

C参考代码

C++参考代码

BC89-密码验证

C参考代码

C++参考代码

BC88-有序序列插入一个数

BC87-统计成绩

C参考代码

C++参考代码

BC86-奇偶统计

C参考代码

C++参考代码

BC85-包含数字9的数

C参考代码

C++参考代码

BC84-计算y的值

C参考代码

C++参考代码

BC83-被5整除问题

C参考代码

C++参考代码

BC82-(a+b-c)*d的计算问题

C参考代码

C++参考代码

BC81-学好C++

C参考代码

C++参考代码

BC80-登录验证

C参考代码

C++参考代码

BC79-图像相似度

C参考代码

C++参考代码

BC78-筛选法求素数

C参考代码

C++参考代码

BC77-有序序列插入一个数

C参考代码

C++参考代码

BC76-公务员面试

C参考代码

C++参考代码

BC75-数字三角形

C参考代码

C++参考代码

BC74-HTTP状态码

C参考代码

C++参考代码

BC73-挂科危险

C参考代码

C++参考代码

BC72-平均身高

C参考代码

C++参考代码

BC71-新年快乐

C参考代码

C++参考代码

BC70-空心三角形图案

C参考代码

C++参考代码

BC69-空心正方形图案

C参考代码

C++参考代码

BC68-X形图案

C参考代码

C++参考代码

BC67-正斜线形图案

C参考代码

C++参考代码

BC66-反斜线形图案

C参考代码

C++参考代码

BC65-箭形图案

C参考代码

C++参考代码


BC140-KiKi设计类继承

C参考代码

C++参考代码

BC139-KiKi定义电子日历类

C参考代码

C++参考代码

BC138-KiKi学结构体和指针

C参考代码

C++参考代码

BC137-KiKi判断上三角矩阵

C参考代码

C++参考代码

BC136-Kiki去重整数并排序

C参考代码

C++参考代码

BC135-KiKi求质数个数

C参考代码

C++参考代码

BC134-KiKi的最高分

C参考代码

C++参考代码

BC133-KiKi说祝福语

C参考代码

C++参考代码

BC132-KiKi算期末成绩

C参考代码

C++参考代码

BC131-KiKi学程序设计基础

C参考代码

C++参考代码

BC130-小乐乐查找数字

C参考代码

C++参考代码

BC129-小乐乐计算函数

C参考代码

C++参考代码

BC128-小乐乐计算求和

C参考代码

C++参考代码

BC127-小乐乐算最高分

C参考代码

C++参考代码

BC126-小乐乐算多少人被请家长

C参考代码

C++参考代码

BC125-小乐乐转换成绩

C参考代码

C++参考代码

BC124-小乐乐是否被叫家长

C参考代码

C++参考代码

BC123-小乐乐找最大数

C参考代码

C++参考代码

BC122-小乐乐算平均分

C参考代码

C++参考代码

BC121-小乐乐学编程

C参考代码

C++参考代码

BC120-小乐乐与二段数

C参考代码

C++参考代码

BC119-小乐乐与字符串

C参考代码

C++参考代码

BC118-小乐乐与序列

C参考代码

C++参考代码

BC117-小乐乐走台阶

C参考代码

C++参考代码

BC116-小乐乐改数字

C参考代码

C++参考代码

BC115-小乐乐与欧几里得

C参考代码

C++参考代码

BC114-小乐乐排电梯

C参考代码

C++参考代码

BC113-小乐乐定闹钟

C参考代码

C++参考代码

BC112-小乐乐求和

C参考代码

C++参考代码

BC111-小乐乐与进制转换

C参考代码

C++参考代码

BC110-井亨棋

C参考代码

C++参考代码

BC109-杨辉三角

C参考代码

C++参考代码

BC108-矩阵交换

C参考代码

C++参考代码

BC107-矩阵转置

C参考代码

C++参考代码

BC106-上三角矩阵判定

C参考代码

C++参考代码

BC105-矩阵相等判定

C参考代码

C++参考代码

BC104-最高身高

C参考代码

C++参考代码

BC103-序列重组矩阵

C参考代码

C++参考代码

BC102-矩阵元素定位

C参考代码

C++参考代码

BC101-班级成绩输入输出

C参考代码

C++参考代码

BC100-有序序列合并

C参考代码

C++参考代码

BC99-序列中整数去重

C参考代码

C++参考代码

BC98-序列中删除指定数字

C参考代码

C++参考代码

BC97-有序序列插入一个整数

C参考代码

C++参考代码

BC96-有序序列判断

C参考代码

C++参考代码

BC95-最高分与最低分之差

C参考代码

C++参考代码

BC94-N个数之和

题目描述
输入数字N,然后输入N个数,计算这N个数的和。
输入描述:

第一行输入一个整数N(0≤N≤50),第二行输入用空格分隔的N个整数。

输出描述:

输出为一行,为第二行输入的“N个整数之和”的计算结果。

示例1
输入

5
1 2 3 4 5

输出

15

C参考代码

#include<stdio.h>
int main()
{
    int N,tmp,ans=0;
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
        scanf("%d",&tmp);
        ans+=tmp;
    }
    printf("%d",ans);
    return 0;
}

C++参考代码

#include<bits/stdc++.h>
using namespace std;
 
int a[45];
 
int main() 
{
   int n, s = 0;
   cin >> n;
   for(int i = 1; i <= n; i++)
   {
           cin >> a[i];
   }
   for(int i = 1; i <= n; i++)
   {
           s += a[i];
   }
    cout << s << endl;
    return 0;
}

BC93-统计数据正负个数

题目描述
输入10个整数,分别统计输出正数、负数的个数。
输入描述:

输入10个整数(范围-2^31~2^31-1),用空格分隔。

输出描述:

两行,第一行正数个数,第二行负数个数,具体格式见样例。

示例1
输入
-1 2 3 -6 7 8 -1 6 8 10

输出
positive:7
negative:3

C参考代码

#include<stdio.h>
int main()
{
    int a[10];
    int pos=0,neg=0;
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]>=0)
            pos++;
        else
            neg++;
    }
    printf("positive:%d\nnegative:%d",pos,neg);
    return 0;
}

C++参考代码

#include<bits/stdc++.h>
using namespace std;
int a[45];
int main()
{
	int f = 0, z = 0;
	for (int i = 1; i <= 10; i++)
	{
		cin >> a[i];
	}
	for (int i = 1; i <= 10; i++)
	{
		if (a[i] < 0) f++;
		if (a[i] > 0) z++;
	}
	cout << "positive:" << z << endl;
	cout << "negative:" << f << endl;
	return 0;
}

BC92-逆序输出

题目描述
输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。
输入描述:

一行,输入10个整数(范围-2^31~2^31-1),用空格分隔。

输出描述:

一行,逆序输出输入的10个整数,用空格分隔。

示例1
输入

1 2 3 4 5 6 7 8 9 10

输出

10 9 8 7 6 5 4 3 2 1

 

C参考代码

#include<stdio.h>
int main()
{
    int ch[10],i;
    for(i=0;i<10;i++)
        scanf("%d",&ch[i]);
    for(i=9;i>=0;i--)
        printf("%d ",ch[i]);
    
}

C++参考代码

#include<iostream>
using namespace std;
int a[45];
int main()
{
	for (int i = 1; i <= 10; i++)
	{
		cin >> a[i];
	}
	for (int i = 10; i >= 1; i--)
	{
		cout << a[i] << " ";
	}
	return 0;
}

BC91-成绩输入输出问题

题目不存在

BC90-矩阵计算

题目描述

输入NxM矩阵,矩阵元素均为整数,计算其中大于零的元素之和。
输入描述:

第一行为N M(N: 矩阵行数;M: 矩阵列数,且M,N<=10),接下来的N行为矩阵各行。

输出描述:

一行,其中大于零的元素之和。

示例1
输入
3 3
2 3 4
-5 -9 -7
0 8 -4

输出
17

C参考代码

#include<stdio.h>
int main(){
    int n,m,t,s=0;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d",&t);
            if(t>0)s+=t;
        }
    }
    printf("%d",s);
    return 0;
}

C++参考代码

#include<iostream>

using namespace std;

int main()
{
    int n,m;
    int sum=0;
    cin>>n>>m;//输入行和列
    int a[12][12];//数组容量设置的大些,防止索引越界
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
        {
            cin>>a[i][j];//顺序输入每个元素
            if(a[i][j]>0)//如果当前元素大于0
                sum+=a[i][j];//加起来求和
        }
    }
    cout<<sum<<endl;
    return 0;
}

BC89-密码验证

题目描述

用户登录网站,通常需要注册,一般需要输入两遍密码。请编程判断输入的两次密码是否一致,一致输出“same”,不一致输出“different”


输入描述:

每行有两个用空格分开的字符串,第一个为密码,第二个为重复密码。

输出描述:

每组输出一个字符串(“same”或“different”)。

示例1
输入

abc abc

输出

same

C参考代码

#define _CRT_SECURE_NO_WARNINGS
#define MAX 100
#include <stdio.h>
#include<string.h>
int main()
{
    char code1[MAX];
    char code2[MAX];
    scanf("%s %s", code1, code2);
    if (strcmp(code1, code2) == 0)
    {
        printf("same");
    }
    else
    {
        printf("different");
    }
    return 0;
}

C++参考代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;//定义两个字符串s1和s2
    string s2;
    cin>>s1>>s2;//依次输入
    if(s1==s2)//如果相等
        cout<<"same";//输出same
    else//否则不相等
        cout<<"different";//输出different
    return 0;
}

BC88-有序序列插入一个数

与BC77重复

BC87-统计成绩

题目描述

输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。
输入描述:

两行,

第1行,正整数n(1≤n≤100)

第2行,n科成绩(范围0.0~100.0),用空格分隔。

输出描述:

输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。

示例1
输入
5
99.5 100.0 22.0 60.0 88.5

输出
100.00 22.00 74.00

C参考代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n;
    double sum = 0, x, max = -1, min = 101, avg;
    scanf("%d", &n);
    int m = n;
    while (n--) {
        scanf("%lf", &x);
        sum += x;
        if (x > max) max = x;
        if (x < min) min = x;
    }
    avg = sum / m;
    printf("%.2f %.2f %.2f\n", max, min, avg);
}

C++参考代码

#include<iostream>
#include<iomanip>  //C++中浮点数保留小数点的有文件要有此文件

using namespace std;

int main()
{
    int num;
    cin>>num;
    float a[num+1];//数组容量设置的大些,防止索引越界
    float sum=0;
    float max=0,min=100;//首先初始化max和min
    for(int i=0;i<num;++i)
    {
        cin>>a[i];
        sum+=a[i];
        if(max<a[i])
            max=a[i];//比较,将大值赋给max
        if(min>a[i])
            min=a[i];//将小值赋给min
    }
    cout<<fixed<<setprecision(2)<<max<<" "
        <<fixed<<setprecision(2)<<min<<" "
        <<fixed<<setprecision(2)<<(sum/num)<<endl;//通过setprecision设置精度
    return 0;
}

BC86-奇偶统计

题目描述

任意输入一个正整数N,统计1~N之间奇数的个数和偶数的个数,并输出。
输入描述:

一行,一个正整数N。(1≤N≤100,000)

输出描述:

一行,1~N之间奇数的个数和偶数的个数,用空格分开。

示例1
输入

5

输出

3 2

C参考代码

#include<stdio.h>
int main()
{
    int N;
    scanf("%d",&N);
    if(N%2==1)
        printf("%d %d",N/2+1,N/2);
    else
        printf("%d %d",N/2,N/2);
}

C++参考代码

#include<iostream>

using namespace std;

int main()
{
    int a;
    cin>>a;
    int num_odd=0;
    int num_even=0;
    for(int i=0;i<a;++i)//这里也可用while循环
    {

        if(i%2)
            ++num_even;//偶数的个数加1
        else
            ++num_odd;//奇数的个数加1
    }
    //while循环
    //while(a)//这里也可用while循环
    //{
    //    if(i%2)
    //        ++num_even;//偶数的个数加1
    //    else
    //        ++num_odd;//奇数的个数加1
    //    --a;
    // }
    cout<<num_odd<<" "<<num_even<<endl;
    return 0;
}

BC85-包含数字9的数

题目描述

今年是2019年,KiKi想知道1~2019中有多少个包含数字9的数。包含数字的数是指有某一位是“9”的数,例如“2019”、“199”等。
输入描述:

输出描述:

一行,一个整数,表示1~2019中共有多少个数包含数字9。

C参考代码

#include <stdio.h>

int main(void)
{
    int count = 0;
    int i, t1, t2, t3, t4;
    
    for (i = 1; i <= 2019; i++)
    {
        if (i < 10)
        {
            if (0 == i % 9)
            {
                count++;
            }
        }
        else if (i >= 10 && i < 100)
        {
            t1 = i / 10;
            t2 = i % 10;
            if (t1 == 9 || 9 == t2)
            {
                count++;
            }
        }
        else if (i >= 100 && i < 1000)
        {
            t1 = i / 100;
            t2 = i / 10 % 10;
            t3 = i % 10;
            if (t1 == 9 || 9 == t2 || t3 == 9)
            {
                count++;
            }
        }
        else
        {
            t1 = i / 1000;
            t2 = i / 100 % 10;
            t3 = i / 10 % 10;
            t4 = i % 10;
            if (t1 == 9 || 9 == t2 || t3 == 9 || 9 == t4)
            {
                count++;
            }
        }
    }
    printf("%d\n", count);
    
    return 0;
}

C++参考代码

#include <iostream>

using namespace std;

int result = 0;//初始化结果个数为0

int main() 
{
    for (int i=1; i<=2019; ++i) {
        int t = i;
        while (t > 0) {
            if (t%10 == 9) {//余数为9,说明包含9
                result++;//结果数就加一
                break;
            }
            t /= 10;
        }
    }
    cout << result << endl;//输出含有9的个数
    return 0;
}

BC84-计算y的值

题目描述

已知一个函数y=f(x),当x < 0时,y = 1;当x = 0时,y = 0;当x > 0时,y = -1。   
输入描述:

一行,输入一个整数x。(-10000<x<10000)

输出描述:

一行,输出y的值。

示例1
输入

10

输出

-1

示例2
输入

-10

输出

1

C参考代码

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    if(x<0)
        printf("%d",1);
    else if(x==0)
        printf("%d",0);
    else
        printf("%d",-1);
    return 0;
}

C++参考代码

#include<iostream>
 
using namespace std;
 
int result(int x)//定义了一个返回值为int,形参为int的函数result
{
    if(x<0)
        return 1;//如果小于0,返回1
    else if(x==0)
        return 0;//如果等于0,返回0
    else
        return -1;//否则返回-1
}
 
int main()
{
    int x;
    cin>>x;
    cout<<result(x)<<endl;//带入函数,判断
    return 0;
}

BC83-被5整除问题

题目描述

判断一个整数是否能5整除是一个挺简单的问题,懒惰的KiKi还是不想自己做,于是找到你帮他写代码,你就帮帮他吧。


输入描述:

输入包括一个整数M(1≤M≤100,000)。

输出描述:

输出包括一行,如果M可以被5整除就输出YES,否则输出NO(结果大小写敏感)。

示例1
输入

10

输出

YES

示例2
输入

9

输出

NO

 

C参考代码

#include<stdio.h>
int main()
{
    int M;
    scanf("%d",&M);
    if(M%5==0)
        printf("YES");
    else
        printf("NO");
    return 0;
}

C++参考代码

#include<iostream>
 
using namespace std;
 
int main()
{
    int m;
    cin>>m;//输入要判断的数M
    if(m%5)
        cout<<"NO";//余数不是0;不能被整除输出NO
    else
        cout<<"YES";//余数是0,能够被整除输出YES
    return 0;
}

BC82-(a+b-c)*d的计算问题

题目描述

这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。输出为一行,为“(a+b-c)*d”的计算结果。
输入描述:

输入为一行,用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。

输出描述:

输出为一行,为“(a+b-c)*d”的计算结果。

示例1
输入

1 3 2 4

输出

8

C参考代码

#include<stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    printf("%d",(a+b-c)*d);
    return 0;
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int ret=(a+b-c)*d;
    cout<<ret<<endl;
    return 0;
}

BC81-学好C++

 C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期你将学习C++,学好C++,其他编程语言都可以很轻松掌握。
输入描述:

输出描述:

I will learn C++ well!

C参考代码

#include<stdio.h>
int main(){
    printf("I will learn C++ well!");
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    cout<<"I will learn C++ well!";
    return 0;
}

BC80-登录验证

题目描述
有个软件系统登录的用户名和密码为(用户名:admin,密码:admin),用户输入用户名和密码,判断是否登录成功。
输入描述:

多组测试数据,每行有两个用空格分开的字符串,第一个为用户名,第二个位密码。

输出描述:

针对每组输入测试数据,输出为一行,一个字符串(“Login Success!”或“Login Fail!”)。

示例1
输入

admin admin

输出

Login Success!

示例2
输入

admin abc

输出

Login Fail!

 

C参考代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define MAX 20
int main()
{
    char user[MAX];
    char code[MAX];
    while (~scanf("%s %s", user, code))
    {
        char user_right[MAX] = "admin";
        char code_right[MAX] = "admin";
        if (strcmp(user,user_right)==0 && strcmp(code,code_right)==0)
        {
            printf("Login Success!");
        }
        else
        {
            printf("Login Fail!");
        }
        printf("\n");
    }

    return 0;
}

C++参考代码

#include <iostream>
using namespace std;
int main(){
    string username, password;
    cin >> username >> password;
    username == "admin" && password == "admin" ? cout << "Login Success!" : cout << "Login Fail!";
    return 0;
}

BC79-图像相似度

题目描述
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入描述:

第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

输出描述:

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

示例1
输入

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出

44.44

 

C参考代码

二维数组

#include <stdio.h>
#define MAX 100

int main()
{
    int m, n, A[MAX][MAX], B[MAX][MAX], count = 0;
    scanf("%d%d", &m, &n);
    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
            scanf("%d", &(A[i][j]));
    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
            scanf("%d", &(B[i][j]));
    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
        {
            if(A[i][j] == B[i][j])
                count++;
        }
    //float percent = (100. * (float)count) / (1.0 * (float)m * (float)n);
    printf("%.2f\n", 100. * count / (float) (m * n));
}

C语言使用malloc和变长数组即可;

#include <stdio.h>
#include <stdlib.h>

void init(int m, int n, int x[m][n]);

int main(void)
{
    int m, n;
    float percent;
    int i, j, count;
    
    scanf("%d %d", &m ,&n);
    int (*a)[n] = (int (*)[n])malloc(sizeof(int) * m * n);
    if (NULL == a)
    {
        fprintf(stderr, "Memory Allocation failed!\n");
        exit(EXIT_FAILURE);
    }
    int (*b)[n] = (int (*)[n])malloc(sizeof(int) * m * n);
    if (NULL == b)
    {
        fprintf(stderr, "Memory Allocation failed!\n");
        exit(EXIT_FAILURE);
    }
    init(m, n, a);
    init(m, n, b);
    for (i = 0, count = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (a[i][j] == b[i][j])
            {
                count++;
            }
        }
    }
    percent = (float)count / (m * n);
    printf("%.2f\n", percent * 100);
    
    return 0;
}

void init(int m, int n, int x[m][n])
{
    int i, j;
    
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &x[i][j]);
        }
    }
    return;
}

C++参考代码

//题目要求是相似度,没必要开二维数组,直接初始化长度为长乘宽的一维数组即可
//我们只需要把两个数组都比较一遍,然后统计出有多少相同的数字,最后计算出百分比,结束
#include <iostream>
#include <iomanip>

using namespace std;
int pic1[10001];
int pic2[10001];
int main(){
    int a, b, c;
    double count = 0;
    cin >> a >> b;
    c = a * b;
    for(int t = 0; t < c; t++){
        cin >> pic1[t];
    }
    for(int t = 0; t < c; t++){
        cin >> pic2[t];
        count += pic2[t] == pic1[t] ? 1: 0;
    }
    cout << fixed << setprecision(2) << count * 100.00 / c;
    return 0;
}

BC78-筛选法求素数

题目描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
输入描述:

多组输入,每行输入一个正整数(不大于100)。

输出描述:

针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后0 的个数。每行输出后换行。

示例1
输入

20

输出

2 3 5 7 11 13 17 19
11

 

C参考代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int n, a[101];
    while (scanf("%d", &n) != EOF)
    {
        //初始化数组
        for (int i = 2; i <= n; i++) {
            a[i] = i;
        }
        //将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0
        for (int i = 2; i < n; i++) {
            for (int j = 2; j < n; j++) {
                if (a[j] % i == 0 && i != j)a[j] = 0;
            }
        }
        int cout = 0;
        for (int m = 2; m < n; m++) {
            if (a[m] != 0) {
                printf("%d ", a[m]);
                cout++;
            }
        }
        printf("\n%d\n", n - 1 - cout);
    }

}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int n,k,num=0;
    cin>>n;
    for(int i=2;i<n;i++){
        k=0;
        for(int j=i-1;j>=2;j--){
            if(i%j==0)
                k++;
        }
        if(k==0){
            cout<<i<<" ";
            num++;
        }
        
    }
    cout<<"\n"<<(n-num-1);

    return 0;
}

BC77-有序序列插入一个数

题目描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

示例1
输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30

 

C参考代码

#include <stdio.h>
#define N 50

int main(void)
{
    int i, j, k, t, n, a[N + 1];
    
    scanf("%d", &n);
    getchar();
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    getchar();
    scanf("%d", &j);
    for (i = 0; i < n; i++)
    {
        if (j <= a[i])
        {
            for (k = n - 1 ; k >= i; k--)
            {
                a[k + 1] = a[k];//数组向后移动;
            }
            a[i] = j;//放置添加的数;
            break;
        }
    }
    if (i == n)//如果要添加的数比原数组所有元素都大;
    {
        a[i] = j;//就放置到数组末尾;
    }
    for (i = 0; i < n + 1; i++)
    {
        printf("%d ", a[i]);
    }
    
    return 0;
}

C++参考代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main(){
    int n;
    cin >> n;
    vector<int> ans;
    for(int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        ans.push_back(temp);
    }
    int m;
    cin >> m;
    ans.push_back(m);
    sort(ans.begin(), ans.end());
    for(int i = 0; i < ans.size(); i++)
        printf("%d ", ans[i]);
    return 0;
}

输出的变量名字一般起名为:ans

BC76-公务员面试

题目描述
公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
输入描述:

一行,输入7个整数(0~100),代表7个成绩,用空格分隔。

输出描述:

一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。

示例1
输入

99 45 78 67 72 88 60

输出

73.00

C参考代码

#include<stdio.h>
int main()
{
    int i,j,tmp;
    float a[7],sum=0;
    scanf("%f %f %f %f %f %f %f",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
    //类似冒泡排序找出最大值放在a[6]
    for(i=0;i<6;i++)
    {
        if(a[i]>a[i+1])
        {
            tmp=a[i];
            a[i]=a[i+1];
            a[i+1]=tmp;
        }
    }
    //找出最小值放在a[0]
    for(j=5;j>0;j--)
    {
        if(a[j]<a[j-1])
        {
            tmp=a[j-1];
            a[j-1]=a[j];
            a[j]=tmp;
        }
    }
    for(tmp=j+1;tmp<i;tmp++)
    {
        sum+=a[tmp];//此时j=0,i=6,求出a[1]~a[5]的和
    }
    printf("%.2f",sum/5);
    return 0;
}

C++参考代码

#include<iostream>
#include <iomanip> 
using namespace std;
int main() 
{
    int arr[7] = { 0 };
    int max = 0,min = 100,max_p, min_p;
    int tmp=0;
    for (int i = 0; i < 7; i++)
    {
        cin >> arr[i];
        if (arr[i] > max)
        {
            max = arr[i];
            max_p = i;
        }
            
        if (arr[i] < min)
        {
            min = arr[i];
            min_p = i;
        }
                
    }
    cout << setiosflags(ios::fixed) << setprecision(2);
    for (int j = 0; j < 7; j++)
    {
        if (j != max_p && j != min_p)
        {
            tmp += arr[j];
        }
    }
    cout << tmp / 5.0;
    return 0;
}

BC75-数字三角形

题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。
输入描述:

多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。

输出描述:

针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

示例1
输入

4

输出

1
1 2
1 2 3
1 2 3 4

示例2
输入

5

输出

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

 

C参考代码

#include <stdio.h>
 
int main(void)
{
    int i, j, n;
     
    while (scanf("%d", &n) != EOF && (n >= 3 && n <= 20))
    {
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= i; j++)
            {
                printf("%d ", j);
            }
            putchar('\n');
        }
    }
     
    return 0;
}

C++参考代码

#include<iostream>
using namespace std;
int main() 
{
    int n;
    while (cin >> n)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                cout << j << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

BC74-HTTP状态码

题目描述

KiKi访问网站,得到HTTP状态码,但他不知道什么含义,BoBo老师告诉他常见HTTP状态码:200(OK,请求已成功),202(Accepted,服务器已接受请求,但尚未处理。)400(Bad Request,请求参数有误),403(Forbidden,被禁止),404(Not Found,请求失败),500(Internal Server Error,服务器内部错误),502(Bad Gateway,错误网关)。
输入描述:

多组输入,一行,一个整数(100~600),表示HTTP状态码。

输出描述:

针对每组输入的HTTP状态,输出该状态码对应的含义,具体对应如下:
200-OK
202-Accepted
400-Bad Request
403-Forbidden
404-Not Found
500-Internal Server Error
502-Bad Gateway

示例1
输入

200

输出

OK

C参考代码

#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        switch(n)
        {
            case(200):printf("OK\n");break;
            case(202):printf("Accepted\n");break;
            case(400):printf("Bad Request\n");break;
            case(403):printf("Forbidden\n");break;
            case(404):printf("Not Found\n");break;
            case(500):printf("Internal Server Error\n");break;
            case(502):printf("Bad Gateway\n");break;
        }
    }
    return 0;
}

C++参考代码

#include<bits/stdc++.h>
using namespace std;
 
int main() {
    string s[7] = {
      "200-OK",
      "202-Accepted",
      "400-Bad Request",
      "403-Forbidden",
      "404-Not Found",
      "500-Internal Server Error",
      "502-Bad Gateway"
    };
    string in;
    while(cin >> in) {
        for(int i=0;i<7;i++) {
            if(s[i].find(in)!=-1) {
                cout << s[i].substr(4) << endl;
            }
        }
    }
    return 0;
}

BC73-挂科危险

题目描述:KiKi想知道这学期他的学习情况,BoBo老师告诉他这学期挂的科目累计的学分,根据所挂学分,判断KiKi学习情况,10分以上:很危险(Danger++),4~9分:危险(Danger),0~3:Good。
输入描述:一行,一个整数(0~30),表示KiKi挂的科目累计的学分。

输出描述:一行,根据输入的挂科学分,输出相应学习情况(Danger++,Danger,Good)。

示例1
输入

14

输出

Danger++

示例2
输入

9

输出

Danger

示例3
输入
1

输出

Good

C参考代码

#include <stdio.h>
int main(){
    int num;
    scanf("%d",&num);
    if(num >=10){
        printf("Danger++");
    }else if(num >=4 && num <=9){
        printf("Danger");
    }else if(num >=0 && num <=3){
        printf("Good");
    }
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    switch(n)
    {
        case 0:
        case 1:
        case 2:
        case 3:
            cout<<"Good";
            break;
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
            cout<<"Danger";
            break;
        default:
            cout<<"Danger++";
    }
    
}

BC72-平均身高

题目描述:从键盘输入5个人的身高(米),求他们的平均身高(米)。
输入描述:一行,连续输入5个身高(范围0.00~2.00),用空格分隔。
输出描述:一行,输出平均身高,保留两位小数。
示例1
输入
1.68 1.75 1.82 1.60 1.92
输出
1.75

C参考代码

#include <stdio.h>
int main()
{
    double a,b,c,d,e;
    while(~scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&d,&e)){
        printf("%.2f\n",(a+b+c+d+e)/5.0);
    }
    return 0;
}

C++参考代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    float temp, res = 0;
    while(cin >> temp) res += temp;
    printf("%.2f",0.2 * res);
    return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
    float temp, res = 0;
    while (cin >> temp) res += temp;
    cout << setiosflags(ios::fixed) << setprecision(2); //方法二,c++
    cout << 0.2 * res << endl;
    return 0;
}

cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);

合在一起的意思就是,输出一个右对齐的小数点后两位的浮点数。

BC71-新年快乐

题目描述
新年到来,输出信息迎接新年。
输入描述:

输出描述:
Happy New Year*2019*

C参考代码

#include<stdio.h>
int main()
{
    printf("Happy New Year*2019*");
    return 0;
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    cout << "Happy New Year*2019*";
    return 0;
}

BC70-空心三角形图案

题目描述:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。
输入描述:多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。
输出描述:针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。

示例1
输入

4

输出

*       
* *     
*   *   
* * * *

示例2
输入
5

输出

*         
* *       
*   *     
*     *   
* * * * *

C参考代码

#include <stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        int i,j;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(j==0||i==j||i==n-1){
                    printf("* ");
                }else{
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    while (cin >> n)
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (j == 0 || i == n - 1 || i == j)
                    cout << "* ";
                else
                    cout << "  ";
            }
            cout << endl;
        }

    }

    return 0;
}

BC69-空心正方形图案

题目描述:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。
输入描述:多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

示例1
输入

4

输出

* * * *
*     *
*     *
* * * *

示例2
输入

5

输出
* * * * *
*       *
*       *
*       *
* * * * *

 

C参考代码

#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i==0||j==0||i==n-1||j==n-1)
                    printf("* ");
                else
                    printf("  ");
            }
            putchar(10);
        }
    }
    
    return 0;
}

C++参考代码

#include<iostream>
using namespace std;
int main() {
    int a = 0;
    while (cin >> a) {
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < a; j++) {
                if (i == 0 || j == 0)cout << "* ";
                else if (i == a - 1 || j == a-1)cout << "* ";
                else cout << "  ";
            }
            cout << endl;
        }
    }
    return 0;
}

BC68-X形图案

题目描述:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:针对每行输入,输出用“*”组成的X形图案。

示例1
输入

5

输出

*   *
 * *
  *  
 * *
*   *

示例2
输入

6

输出

*    *
 *  *
  **  
  **  
 *  *
*    *

C参考代码

#include <stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;++i)//看成二维数组
        {
            for(int j=0;j<n;++j)
            {
                if(i==j||j==n-i-1)//对角线与逆对角线
                    printf("*");
                else
                    printf(" ");//其余
            }
            printf("\n");
        }
    }
    return 0;
}

C语言多组输入也可以这样写while(~scanf("%d",&n)){}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if((i==j)||(i+j==n-1))
                   cout<<"*";
                else
                   cout<<" ";
            }
            cout<<endl;
        }
    }
    
    return 0;
}

BC67-正斜线形图案

题目描述KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正斜线形图案。

输入描述:多组输入,一个整数(2~20),表示输出的行数,也表示组成正斜线的“*”的数量。

输出描述:针对每行输入,输出用“*”组成的正斜线。

示例1
输入

4

输出

   *
  *
 *  
*   

示例2
输入

5

输出

    *
   *
  *  
 *   
*

C参考代码

#include <stdio.h>
int main()
{
    int n;
    while (scanf("%d", &n) != EOF) {
        int i, j;
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                if (i + j == n - 1) {
                    printf("*");
                }
                else {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
}

C++参考代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i+j==n-1)
                {
                    cout<<"*";
                }
                else
                {
                    cout<<" ";
                }
            }
            cout<<endl;
        }
        
        
    }
    
    return 0;
}

 

BC66-反斜线形图案

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的反斜线形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成反斜线的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的反斜线。

示例1

输入

4

输出

*   
 *  
  * 
   *

示例2

输入

5

输出

*    
 *   
  *  
   * 
    *

C参考代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		int j = 0;
		for (j = 0; j < n; j++)
		{
			int spaceBeforNum = j;
			int starnum = 1;
			int spaceAfterNum = n - starnum - spaceBeforNum;
			for (i = 0; i < spaceBeforNum; i++)
			{
				printf(" ");
			}
			for (i = 0; i < starnum; i++)
			{
				printf("*");
			}
			for (i = 0; i < spaceAfterNum; i++)
			{
				printf(" ");
			}
			printf("\n");
		}
	}
	return 0;
}

C++参考代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    while(scanf("%d",&a) != EOF){
        for(int i = 0;i<a;i++){
            for(int j = 0;j<i;j++){
                printf(" ");
            }
            printf("*");
            //需要注意后面的空格,按每行字符一致原则
            for(int k = 0;k<a-i;k++){
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

 

BC65-箭形图案

https://www.nowcoder.com/practice/a6d1081e0c9a42f19e42ed6cd91556c1?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking&tab=answerKey

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:针对每行输入,输出用“*”组成的箭形。

示例1

输入

2

输出

    *
  **
***
  **
    *

示例2

输入

3

输出

      *
    **
  ***
****
  ***
    **
      *

示例3

输入

4

输出

 

        *
      **
    ***
  ****
*****
  ****
    ***
      **
        *

C参考代码

#include <stdio.h>
int main()
{
    int z;
    while(scanf("%d", &z) != EOF){
        /*
        外层循环控制行 i,
        内层循环控制列。
        
        上半部分:
            z行
            先输出第一行6个,第二行4个,第三行2个  空格
                 2z       zz-2      2z-4
                 2z-2i+2  2z-2i+2   2z-2i+2
            在输出i个"*"
        中间部分z+1个*
        下半部分:
            z行
            先输出2i个 空格
            在输出z-i+1个 "*"
        */
        for(int i = 1; i <= z; i++){
            for(int j = 1; j <= 2*z-2*i+2; j++){
                printf(" ");
            }
            for(int k = 1; k <= i; k++){
                printf("*");
            }
            putchar(10);//putchar函数是输出一个字符。所以他代表'\n'也就是换行 
        }
        for(int i = 1; i <= z+1; i++){
            printf("*");
        }
        putchar(10);
        for(int i = 1; i <= z; i++){
            for(int j = 1; j <= 2*i; j++){
                printf(" ");
            }
            for(int k = 1; k <= z-i+1; k++){
                printf("*");
            }
            putchar(10);
        }
    }
    return 0;
}

深度理解

putchar(10);//putchar函数是输出一个字符。所以他代表'\n'也就是换行

上下对称图形的通用解法:分为上中下三个考虑,通过特例写出不变的数学表达式循环也规范用i=0;i<数学表达式;i++

C++参考代码

标准的对称图形的处理方法

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    while(cin >> n) {
        n++;
        for(int i=1;i<=2*n-1;i++) {
            int spaceNum = abs(i-n);
            int starNum = n-spaceNum;
            for(int j=0;j<spaceNum*2;j++)
                cout << " ";
            for(int j=0;j<starNum;j++)
                cout << "*";
            cout << endl;
        }
    }
    return 0;
}

深度理解

C++的多组输入:while(cin>>n){}

#include<bits/stdc++.h>包含了目前c++所包含的所有头文件!!!!

C++中的abs函数为求绝对值的函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值