习题1

输出一个整数序列中与指定数字相同的数的个数
输入包含2行:第1行为N和m,表示整数序列的长度(N≤100)和指定的数字, 中间用一个空格分开;第2行为N个整数,整数之间以一个空格分开。

#include<iostream> 
using namespace std;
int main()
{
	int N,m,x=0;
	cin>>N>>m;//N表示整数序列长度,m表示指定数字
	int a[N]={0} ;
	for(int i=0;i<=N-1;i++) 
	{
		cin>>a[i];
	}
	for(int i=0;i<=N;i++)
	{
		if(a[i]==m)
		{
			x+=1;
		}
	}
	cout<<x;
	
	return 0;
}

习题2

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

#include<iostream> 
using namespace std;
int main()
{
	//10个100到200之间的整数 
	int a[10]={0};
	for(int i=0;i<=9;i++)
	{
		cin>>a[i];
	}
	//表示陶陶把手伸直的时候能够达到的最大高度。(100-120)
	int h,sum=0;
	cin>>h; 
	for(int i=0;i<10;i++)
	{
		if(a[i]<=h+30)
		{
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

下面是一个图书的单价表:
1、计算概论 28.9 元/本
2、数据结构与算法 32.7 元/本
3、数字逻辑 45.6 元/本
4、C++程序设计教程 78 元/本
5、人工智能 35 元/本
6、计算机体系结构 86.2 元/本
7、编译原理 27.8 元/本
8、操作系统 43 元/本
9、计算机网络 56 元/本
10、JAVA程序设计 65 元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入一行,包含 10 个整数(大于等于 0,小于等于 100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
输出一行,包含一个浮点数 f,表示应付的总费用,精确到小数点后一位。

#include<iostream> 
using namespace std;
int main()
{
	//将10本图书价格放入数组中
	double a[10]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65},sum=0;
	int n;
	for(int i=0;i<10;i++)
	{
		cin>>n;
		sum+=a[i]*n;
	}
	printf("%.1lf",sum);
	return 0;
}

某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18岁、19-35岁、36-60岁、61以上(含61)四个年龄段统计的患病人数以及占总患病人数的比例。
输入:共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
输出:按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病总人数以及人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。

#include<iostream> 
using namespace std;
int main()
{
	//过往病人的数目n(0 < n <= 100)
	int n;
	cin>>n;
	double age[n]={0};
	//每个病人患病时的年龄
	double a,b,c,d;
	for(int i=0;i<=n-1;i++)
	{
		cin>>age[i];
	 	if(age[i]>0&&age[i]<=18)
            a+=1;
        if(age[i]>=19&&age[i]<=35)
            b+=1;
        if(age[i]>=36&&age[i]<=60)
            c+=1;
        if(age[i]>=61)
            d+=1;
	}
 	printf("%d %.2lf%%\n",a,a/n*100);
    printf("%d %.2lf%%\n",b,b/n*100);
    printf("%d %.2lf%%\n",c,c/n*100);
    printf("%d %.2lf%%\n",d,d/n*100);
	return 0;
}

某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18岁、19-35岁、36-60岁、61以上(含61)四个年龄段统计的患病人数以及占总患病人数的比例。
输入:共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
输出:按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病总人数以及人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。

#include <iostream>
 
using namespace std;
 
int main()
{
    int l,m,i,q,s=0;
    cin >> l >> m;
    int a[2][m];
    int b[l]={0};
    for(i=0;i<m;i++)
    {
        for(q=0;q<=1;q++)
        {
            cin >> a[q][i];
        }
    }
    for(i=0;i<m;i++)
    {
        for(q=a[0][i];q<=a[1][i];q++)
        {
            b[q]=-1;
        }
    }
    for(i=0;i<l;i++)
    {
        s = b[i] + s;
    }
    cout << s + 2;
    return 0;
}

N0I2005普及组

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都 是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的 位置;数轴上的每个整数点,即0,1,2,…,L都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表 示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。 现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些 树都移走后,马路上还有多少棵树。 比如:L=5,那么马路上默认有6棵树,分别种在0,1,2,3,4,5 这几个位置,现要求将 1~3 及2~4之间的树移走,那么需要移走4棵树,还剩2棵树。

解析:题目的核心就是一排树,从中选取一段通高铁,选取出来的树移走,剩下多少棵树

分析:

1、需要那些变量

l(总共树)、m(移走的树)、u、v

通过数组表示每个树a[10005]

2、如何实现数据的输入

l、m输入一次

u、v需要输入m次

3、怎么求解

a0-al先赋值为1,代表有树

au-av赋值为0,代表无树

a0-al遍历找1的值,统计剩下多少棵树

#include<iostream> 
using namespace std;
int main()
{
	int l,m,u,v,a[10005],sum=0;
	cin>>l>>m;//l总共多少棵树,m需要挪走几个区域
	//将每个树都赋值1 
	for(int i=0;i<=l;i++)
	{
		a[i]=1;
	}
	//m个区域,u代表起点,v代表终点, 
	for(int i=0;i<m;i++)
	{
		cin>>u>>v;//输入起点和终点
		//挪走区域之间的树 
		for(int j=u;j<=v;j++) 
		{
			a[j]=0;//代表树挪走了 
		}
	}
	//遍历还剩多少树 
	for(int i=0;i<=l;i++) 
	{
		if(a[i]==1)
		{
			sum++;
		}
	}
	cout<<sum;
	return 0;
}
输入样例
    500 3

    150 300

    100 200

    470 471
输出样例
    298

OJ题目

在线性代数、计算几何中,向量点积是一种十分重要的运算。

给定两个n维向量a=(a1,a2,…,an)和b=(b1,b2,…,bn),求点积a·b=a1b1+a2b2+…+anbn。

输入

第一行是一个整数n。1 <= n <= 1000。
第二行包含n个整数a1,a2,…,an。
第三行包含n个整数b1,b2,…,bn。
相邻整数之间用单个空格隔开。每个整数的绝对值都不超过1000。

输出

一个整数,即两个向量的点积结果。

解析:


#include<iostream> 
using namespace std;
int main()
{
	//定义数组 
	int n;
	cin>>n;
	int a[n],b[n]; 
	//循环输入a数组 
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	//循环输入b数组 
	for(int i=0;i<n;i++)
	{
		cin>>b[i];
	}
	//求和 
	int sum=0;
	for(int i=0;i<n;i++)
	{
		sum=sum+a[i]*b[i];
	}
	cout<<sum;
	
	return 0;
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐