语法基础课

文章目录

一、第一讲——变量、输入输出、表达式与顺序语句

1、平均数1(易错)(浮点数的输入输出格式%lf、%.5lf)

读取两个浮点数 A 和 B 的值,对应于两个学生的成绩。
请你计算学生的平均分,其中 A 的成绩的权重为 3.5,B 的成绩的权重为 7.5。
成绩的取值范围在 0 到 10 之间,且均保留一位小数。

输入格式

输入占两行,每行包含一个浮点数,第一行表示 A,第二行表示 B。

输出格式

输出格式为 MEDIA = X,其中 X 为平均分,结果保留五位小数

数据范围

0≤A,B≤10.0

输入样例:

5.0

7.1

输出样例:

MEDIA = 6.43182

1.1 WA代码

#include<iostream>
using namespace std;

int main()
{
    double a,b;
    scanf("%lf %lf",&a,&b);
    
    printf("MEDIA =%.5lf\n",(a+b)/2);
    return 0;
}

1.2 WA原因(权重)

1、没有看懂“权重”到底是什么意思
2、权重计算:即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数
3、计算学生的平均分,其中 A 的成绩的权重为 3.5,B 的成绩的权重为 7.5:
   (a * 3.5 + b * 7.5) / (3.5+7.5)

1.3 AC代码

#include<iostream>
using namespace std;

int main()
{
    double a,b;
    scanf("%lf %lf",&a,&b);
 
    printf("MEDIA = %.5lf\n",(a*3.5+b*7.5)/11);
    return 0;
}

2、工资(水)

请编写一个程序,可以读取一名员工的员工编号,本月工作总时长(小时)以及时薪,
并输出他的工资条,工资条中包括员工编号和员工月收入。

输入格式

输入包含两个整数和一个浮点数,分别代表员工编号,工作时长以及时薪。

每个数占一行。

输出格式

输出共两行,第一行格式为 NUMBER = X,其中 X 为员工编号。

第二行格式为 SALARY = U$ Y,其中 Y 为该员工月收入,保留两位小数。

数据范围

1≤员工编号≤100,

1≤总工作时长≤200,

1≤时薪≤50

输入样例:

25

100

5.50

输出样例:

NUMBER = 25

SALARY = U$ 550.00

2.1 AC代码

#include<iostream>
using namespace std;

int main()
{
    int a,b; //员工编号、工作时长
    double c;      //时薪
    
    scanf("%d%d%lf",&a,&b,&c);
    
    printf("NUMBER = %d\n",a);       //员工编号
    printf("SALARY = U$ %.2lf\n",b*c); //月收入
    return 0;
}

3、油耗(水)

给定一个汽车行驶的总路程(km)和消耗的油量(l),请你求出汽车每消耗 1 升汽油可行驶多少公里路程。

输入格式

输入共两行,第一行包含整数 X,表示行驶总路程。

第二行包含保留一位小数的浮点数 Y,表示消耗的油量。

输出格式

输出格式为 M km/l,其中 M 为计算结果,保留三位小数。

数据范围

1≤X,Y≤109

输入样例:

500

35.0

输出样例:

14.286 km/l

3.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int x;//总路程
	double y;//消耗的油量
	scanf("%d%lf",&x,&y);
	printf("%.3lf km/l\n",x/y);
	return 0;
}

4、两点间的距离(易错)(sqrt开方函数)

给定两个点 P1 和 P2,其中 P1 的坐标为 (x1,y1),P2 的坐标为 (x2,y2),请你计算两点间的距离distance是多少。

distance=根号下 (x2−x1)的平方+(y2−y1)的平方

输入格式

输入共两行,每行包含两个双精度浮点数 xi,yi,表示其中一个点的坐标。

输入数值均保留一位小数。

输出格式

输出你的结果,保留四位小数。

数据范围

−109≤xi,yi≤109

输入样例:

1.0 7.0

5.0 9.0

输出样例:

4.4721

4.1 AC代码

#include<iostream>
#include<cmath>
using namespace std;
//sqrt开方函数

int main()
{
	double x1,x2,y1,y2;

	scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);	//不要忘记&
	//cin >> x1 >>y1 >> x2 >> y2;			//也可以用cin
	printf("%.4lf\n",sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
	return 0;
}

5、钞票(水)

在这个问题中,你需要读取一个整数值并将其分解为多张钞票的和,每种面值的钞票可以使用多张,并要求所用的钞票数量尽可能少。

请你输出读取值和钞票清单。

钞票的可能面值有 100,50,20,10,5,2,1。

输入格式

输入一个整数 N。

输出格式

参照输出样例,输出读取数值以及每种面值的钞票的需求数量。

数据范围

0<N<1e7

输入样例:

576

输出样例:

576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00

5.1 AC代码:

#include<iostream>
using namespace std;

int main()
{
	int n,m;
	//分别为100、50、20、10、5、2、1 的张数 
	int a,b,c,d,e,f,g;
	cin>>m;
	n=m;
	
	a=n/100;
	n%=100;
	
	b=n/50;
	n%=50;
	
	c=n/20;
	n%=20;
	
	d=n/10;
	n%=10;
	
	e=n/5;
	n%=5;
	
	f=n/2;
	n%=2;
	
	g=n;
	
	cout<<m<<endl;
	
	cout<<a<<" nota(s) de R$ 100,00"<<endl;
	cout<<b<<" nota(s) de R$ 50,00"<<endl;
	cout<<c<<" nota(s) de R$ 20,00"<<endl;
	cout<<d<<" nota(s) de R$ 10,00"<<endl;
	cout<<e<<" nota(s) de R$ 5,00"<<endl;
	cout<<f<<" nota(s) de R$ 2,00"<<endl;
	cout<<g<<" nota(s) de R$ 1,00"<<endl;
	return 0;
}

6、时间转换(水)

读取一个整数值,它是工厂中某个事件的持续时间(以秒为单位),
请你将其转换为小时:分钟:秒来表示。

输入格式

输入一个整数 N。

输出格式

输出转换后的时间表示,格式为 hours:minutes:seconds。

数据范围

1≤N≤1000000

输入样例:

556

输出样例:

0:9:16

6.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	int hours,minutes,seconds;
	cin>>n;
	
	hours=n/3600;
	n%=3600;
	
	minutes=n/60;
	n%=60;
	
	seconds=n;
	cout<<hours<<":"<<minutes<<":"<<seconds<<endl;
	return 0;
}

7、钞票和硬币(水)

读取一个带有两个小数位的浮点数,这代表货币价值。

在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。

钞票的面值是 100,50,20,10,5,2。

硬币的面值是 1,0.50,0.25,0.10,0.05 和 0.01。

输入格式

输入一个浮点数 N。

输出格式

参照输出样例,输出每种面值的钞票和硬币的需求数量。

数据范围

0≤N≤1000000.00

输入样例:

576.73

输出样例:

NOTAS:

5 nota(s) de R$ 100.00

1 nota(s) de R$ 50.00

1 nota(s) de R$ 20.00

0 nota(s) de R$ 10.00

1 nota(s) de R$ 5.00

0 nota(s) de R$ 2.00
MOEDAS:

1 moeda(s) de R$ 1.00

1 moeda(s) de R$ 0.50

0 moeda(s) de R$ 0.25

2 moeda(s) de R$ 0.10

0 moeda(s) de R$ 0.05

3 moeda(s) de R$ 0.01

7.1 思路:

因为浮点数不能进行%运算,因此需要将浮点数n输入后,
将n*100赋值给整型m,将 被除数 都 * 100,再进行%运算

7.2 代码:

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

//浮点型变量的 求余运算不能使用“%”,需要使用fmod

int main()
{
	double n;
	cin>>n; //输入货币的价值 
	
	//因为浮点型的n不能进行%运算,
	//将n*100胡赋值给整型m,就可以正常运算了 
	int m=n*100;
	
	int a,b,c,d,e,f,g;
	int h,i,j,k,l;
	
	//整数部分 
		
	a=m/10000;
	m%=10000;
	
	b=m/5000;
	m%=5000;
	
	c=m/2000;
	m%=2000;
	
	d=m/1000;
	m%=1000;
	
	e=m/500;
	m%=500;
	
	f=m/200;
	m%=200;
	
	g=m/100;
	m%=100;
	
	//小数部分
	
	h=m/50;
	m%=50;
	
	i=m/25;
	m%=25;
	
	j=m/10;
	m%=10;
	
	k=m/5;
	m%=5;
	
	l=m/1;

	
	cout<<"NOTAS:"<<endl;
	cout<<a<<" nota(s) de R$ 100.00"<<endl;
	cout<<b<<" nota(s) de R$ 50.00"<<endl;
	cout<<c<<" nota(s) de R$ 20.00"<<endl;
	cout<<d<<" nota(s) de R$ 10.00"<<endl;
	cout<<e<<" nota(s) de R$ 5.00"<<endl;
	cout<<f<<" nota(s) de R$ 2.00"<<endl;
	
	cout<<"MOEDAS:"<<endl;
	cout<<g<<" moeda(s) de R$ 1.00"<<endl;
	cout<<h<<" moeda(s) de R$ 0.50"<<endl;
	cout<<i<<" moeda(s) de R$ 0.25"<<endl;
	cout<<j<<" moeda(s) de R$ 0.10"<<endl;
	cout<<k<<" moeda(s) de R$ 0.05"<<endl;
	cout<<l<<" moeda(s) de R$ 0.01"<<endl;
	
	return 0;
}

8、天数转换(水)

读取对应于一个人的年龄(以天为单位)的整数值,并转化为年,月和日表示方式输出,年、月、日分别对应 ano(s), mes(es),
dia(s)。

注意:为了方便计算,假设全年 365 天,每月 30 天。 数据保证,不会出现 12 个月和几天的情况,例如 360,363 或 364。

输入格式

输入一个整数 N。

输出格式

参照输出样例,输出转换后的天数表达。

数据范围

1≤N≤1000000

输入样例:

400

输出样例:

1 ano(s)

1 mes(es)

5 dia(s)

8.1 代码:

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

int main()
{
	int n;
	cin>>n;
	
	int year,month,day;
	
	year=n/365;
	n%=365;
	
	month=n/30;
	n%=30;
	
	day=n;
	
	cout<<year<<" ano(s)"<<endl;
	cout<<month<<" mes(es)"<<endl;
	cout<<day<<" dia(s)"<<endl;
	return 0;
}

第二讲——判断语句

1、倍数(水)

读取两个正整数值 A 和 B。

如果其中一个是另一个的整数倍,则输出 Sao Multiplos,否则输出 Nao sao Multiplos。

输入格式

共一行,两个整数 A 和 B。

输出格式

按题目所述,输出结果。

数据范围

0<A,B<100

输入样例:

6 24

输出样例:

Sao Multiplos

1.1代码:

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

int main()
{
	int a,b;
	cin>>a>>b;
	
	if(a%b==0||b%a==0)
		cout<<"Sao Multiplos"<<endl;
	else
		cout<<"Nao sao Multiplos"<<endl;
		
	return 0;
}

2、零食(水)

某商店出售 5 种零食,零食编号为 1∼5。

5 种零食的价目表如下所示:

零食种类   价格

零食 1   R$ 4.00

零食 2   R$ 4.50

零食 3   R$ 5.00

零食 4   R$ 2.00

零食 5   R$ 1.50

现在给定某种零食的编号和数量,请你计算总价值是多少。

输入格式

输入包含两个整数 x 和 y,其中 x 为零食编号,y 为零食数量。

输出格式

输出格式为 Total: R$ X,其中 X 为总价值,保留两位小数。

数据范围

1≤x≤5,

1≤y≤100

输入样例:

3 2

输出样例:

Total: R$ 10.00

2.1 代码:

#include<iostream>
using namespace std;

//计算零食总价值 
int main()
{
	double x,y;
	cin>>x>>y;	//零食编号、数量
	
	double sum;//总价
	
	double sale;//单价 
	if(x==1)
		sale=4;
	else if(x==2)
		sale=4.5;
	else if(x==3)
		sale=5;
	else if(x==4)
		sale=2;
	else if(x==5)
		sale=1.5;
	
	sum=sale*y;
	printf("Total: R$ %.2lf\n",sum);
	return 0;
}

3、区间(水)

给定一个浮点数,请你判断该数字属于以下哪个区间:[0,25],(25,50],(50,75],(75,100]。

如果给定的数值小于 0 或大于 100,则程序输出 Fora de intervalo,表示超出范围。

开区间 (a,b):在实数 a 和实数 b 之间的所有实数,但不包含 a 和 b。

闭区间 [a,b]:在实数 a 和实数 b 之间的所有实数,包含 a 和 b。

输入格式

输入一个浮点数。

输出格式

判断输入数值位于哪个区间,按格式 Intervalo x 输出,
其中 x 为区间范围 [0,25],(25,50],(50,75],(75,100] 中的一个。

如果数值位于所有区间之外,则输出 Fora de intervalo。

输入样例:

25.01

输出样例:

Intervalo (25,50]

3.1 代码

#include<iostream>
using namespace std;

int main()
{
	double n;
	cin>>n;
	
	if(n<0||n>100)
		cout<<"Fora de intervalo"<<endl;
	else if(n>=0&&n<=25)
		cout<<"Intervalo [0,25]"<<endl;
	else if(n>25&&n<=50)
		cout<<"Intervalo (25,50]"<<endl;
	else if(n>50&&n<=75)
		cout<<"Intervalo (50,75]"<<endl;
	else if(n>75&&n<=100)
		cout<<"Intervalo (75,100]"<<endl;
	
	return 0;
}

4、三角形(易错)

读取三个浮点数 A,B 和 C 并验证是否可以用它们形成三角形

如果可能,则计算并输出三角形的周长

Perimetro = XX.X

如果不可能,则计算并输出以 A 和 B 为底以 C 为高的梯形面积

Area = XX.X

输入格式

共一行,包含三个浮点数 A,B,C。

输出格式

按题目描述格式,输出答案,答案保留一位小数。

数据范围

0<A,B,C<100.0

输入样例1:

6.0 4.0 2.0

输出样例1:

Area = 10.0

输入样例2:

6.0 4.0 2.1

输出样例2:

Perimetro = 12.1

4.1 WA代码

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

int main()
{
	double a,b,c;
	cin>>a>>b>>c;
	
	if(a+b>c&&a+c>b&&b+c>a)
		printf("Perimetro = %.1lf\n",a+b+c);
	else
		printf("Area = %.1lf\n",(a+b)*c/2);
	return 0; 
}

4.2 WA原因(形成三角形条件)

没有搞清判断是否可以形成三角形的条件

判断三边是否可以形成三角形
任意两边之和 > 第三边 && 任意两边之差的绝对值 < 第三边
if( a+b>c && fabs(a-b)<c )

4.2 AC代码

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

int main()
{
	double a,b,c;
	cin>>a>>b>>c;
	
	//判断三边是否可构成三角形   
	//任意两边之和>第三边 && 任意两边之差的绝对值<第三边
	
	if(a+b>c&&fabs(a-b)<c)
		printf("Perimetro = %.1lf\n",a+b+c);
	else
		printf("Area = %.1lf\n",(a+b)*c/2);
	return 0; 
}

5、游戏时间(水)

读取两个整数 A 和 B,表示游戏的开始时间和结束时间,以小时为单位。

然后请你计算游戏的持续时间,已知游戏可以在一天开始并在另一天结束,最长持续时间为 24 小时。

如果 A 与 B 相等,则视为持续了 24 小时。

输入格式

共一行,包含两个整数 A 和 B。

输出格式

输出格式为 O JOGO DUROU X HORA(S),其中 X 为游戏持续时间。

数据范围

0≤A,B≤23

输入样例1:

16 2

输出样例1:

O JOGO DUROU 10 HORA(S)

输入样例2:

0 0

输出样例2:

O JOGO DUROU 24 HORA(S)

输入样例3:

2 16

输出样例3:

O JOGO DUROU 14 HORA(S)

5.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int a,b;
	int res;
	cin>>a>>b;	//游戏开始时间和结束时间 
	
	if(a==b)
		res=24;
	else if(a>b)
		res=24-a+b;
	else if(a<b)
		res=b-a;
	
	cout<<"O JOGO DUROU "<<res<<" HORA(S)"<<endl;
	return 0;
	
}

6、加薪(水)

ABC 公司决定给员工加薪,加薪情况如下所示:

薪水         涨薪幅度
0 - 400.00       15%
400.01 - 800.00      12%
800.01 - 1200.00     10%
1200.01 - 2000.00     7%
超过 2000.00       4%

读取员工的工资,计算并输出员工的新工资,以及员工增加的收入和涨薪幅度。

输入格式

共一行,包含一个保留两位小数的浮点数。

输出格式

输出格式如下所示:

第一行输出 Novo salario: X,X 表示员工新工资,保留两位小数。

第二行输出 Reajuste ganho: Y,Y 表示员工增加的具体收入数值,保留两位小数。

第三行输出 Em percentual: Z,Z 表示涨薪幅度,注意用百分比表示。

数据范围

0≤原工资≤2500.00

输入样例:

400.00

输出样例:

Novo salario: 460.00
Reajuste ganho: 60.00
Em percentual: 15 %

6.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	double n;
	cin>>n;	//读取员工工资
	
	double up;//涨幅
	
	//判断涨幅
	if(n>=0&&n<=400)
		up=0.15;
	else if(n>=400.01&&n<=800)
		up=0.12;
	else if(n>=800.01&&n<=1200)
		up=0.10;
	else if(n>=1200.01&&n<=2000)
		up=0.07;
	else if(n>2000)
		up=0.04;

	printf("Novo salario: %.2lf\n",n+n*up);//新工资
	printf("Reajuste ganho: %.2lf\n",n*up);//涨的工资
	printf("Em percentual: %.0lf %\n",up*100);//涨幅
	
	return 0;		
}

7、动物(水)

给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。

在这里插入图片描述

输入格式

根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。

输出格式

输出识别出的动物的名称。

输入样例:

vertebrado

mamifero

onivoro

输出样例:

homem

7.1 代码

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

int main()
{
	string a,b,c;
	
	getline(cin,a);
	getline(cin,b);
	getline(cin,c);
	
	//cin>>a>>b>>c;	//可以用getline,也可以直接cin,两种写法都可以
	
	if(a=="vertebrado")
	{
		if(b=="ave")
		{
			if(c=="carnivoro")
				cout<<"aguia"<<endl;
			else if(c=="onivoro")
				cout<<"pomba"<<endl;
		}
		else if(b=="mamifero")
		{
			if(c=="onivoro")
				cout<<"homem"<<endl;
			else if(c=="herbivoro")
				cout<<"vaca"<<endl;
		}
	}
	else if(a=="invertebrado")
	{
		if(b=="inseto")
		{
			if(c=="hematofago")
				cout<<"pulga"<<endl;
			else if(c=="herbivoro")
				cout<<"lagarta"<<endl;
		}
		else if(b=="anelideo")
		{
			if(c=="hematofago")
				cout<<"sanguessuga"<<endl;
			else if(c=="onivoro")
				cout<<"minhoca"<<endl;
		}
	}
	return 0;
			
}

8、选择练习1

读取 4 个整数值 A,B,C 和 D。

如果四个整数同时满足以下条件:

B 大于 C。 D 大于 A。 C 和 D 的总和大于 A 和 B 的总和。 C 和 D 是正值。 A 是偶数。
则输出 Valores aceitos,否则,输出 Valores nao aceitos。

输入格式

输入占一行,包含四个整数 A,B,C,D。

输出格式

如果输入数值满足题目条件则输出 Valores aceitos,否则输出 Valores nao aceitos。

数据范围

−100≤A,B,C,D≤100

输入样例:

5 6 7 8

输出样例:

Valores nao aceitos

8.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	
	if(b>c&&d>a&&(c+d)>(a+b)&&c>=0&&d>=0&&a%2==0)
		cout<<"Valores aceitos"<<endl;
	else 
		cout<<"Valores nao aceitos"<<endl;
	return 0;
}

9、DDD(水)

给定一个整数,请根据下表确定并输出其对应的城市名称:

在这里插入图片描述

如果输入数字不在上表中,则输出 DDD nao cadastrado。

输入格式

共一行,包含一个整数。

输出格式

输出对应城市名称,如果没有对应城市名称,则输出 DDD nao cadastrado。

输入样例:

11

输出样例:

Sao Paulo

9.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;
	if(n==61)
		cout<<"Brasilia"<<endl;
	else if(n==71)
		cout<<"Salvador"<<endl;
	else if(n==11)
		cout<<"Sao Paulo"<<endl;
	else if(n==21)
		cout<<"Rio de Janeiro"<<endl;
	else if(n==32)
		cout<<"Juiz de Fora"<<endl;
	else if(n==19)
		cout<<"Campinas"<<endl;
	else if(n==27)
		cout<<"Vitoria"<<endl;
	else if(n==31)
		cout<<"Belo Horizonte"<<endl;
	else 
		cout<<"DDD nao cadastrado"<<endl;
		
	return 0;
}

10、点的坐标

给定两个保留一位小数的浮点数 X,Y,用来表示一个点的横纵坐标。

请你判断该点在坐标系中的位置。

在这里插入图片描述

输入格式

共一行,包含两个浮点数 X,Y,表示点的横纵坐标。

输出格式

如果点在第一象限,则输出 Q1,在第二象限,则输出 Q2,以此类推。

如果点在原点处,则输出 Origem。

否则,如果点在 x 坐标上,则输出 Eixo X,在 y 坐标上,则输出 Eixo Y。

数据范围

−10.0≤X,Y≤10.0

输入样例1:

4.5 -2.2

输出样例1:

Q4

输入样例2:

0.0 0.0

输出样例2:

Origem

10.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	double x,y;
	cin>>x>>y;//横纵坐标
	
	if(x==0&&y==0)
		cout<<"Origem" <<endl;
	else if(x!=0&&y==0)//在x坐标轴上 
		cout<<"Eixo X"<<endl;
	else if(x==0&&y!=0)//在y坐标轴上 
		cout<<"Eixo Y"<<endl;
	else if(x>0&&y>0)
		cout<<"Q1"<<endl;
	else if(x>0&&y<0)
		cout<<"Q4"<<endl;
	else if(x<0&&y>0)
		cout<<"Q2"<<endl;
	else if(x<0&&y<0)
		cout<<"Q3"<<endl;
		
	return 0;
	
}

11、三角形类型(易错)

读取表示三角形三条边的 3 个浮点数 A,B 和 C 并按降序排列,使 A 边是三边中最大的一边。

接下来,根据以下情况,确定它们可以组成的三角形类型:

在这里插入图片描述

输入格式

共一行,包含三个浮点数 A,B,C。

输出格式

输出 A,B,C 组成的三角形的类型。

注意,上述条件可能满足不止一条,这种情况下将所有类型名称,按题目介绍顺序输出,每行输出一条。

数据范围

0<A,B,C≤10.0

输入样例:

7.0 5.0 7.0

输出样例:

TRIANGULO ACUTANGULO

TRIANGULO ISOSCELES

11.1 易错点

易出bug点1:
降序排列a、b、c时,将

	if(a<b)
		swap(a,b);
	if(a<c)
		swap(a,c);
	if(b<c)
		swap(b,c);

三个if的顺序写错,写成:

	//错误写法:
	if(a<b)
		swap(a,b);
	if(b<c)
		swap(b,c);
	if(a<c)
		swap(a,c);
	

易出bug点2:

没有看清题目说的“如果…否则…”,直接连写很多个并列的if

易出bug点3:

if(a==b&&b==c)

误写成:

//错误写法
if(a==b==c)

易出bug点4:

if((a==b&&b!=c)||(b==c&&a!=b))

误以为降序排列后,a就是最大值,如果三个数中有两个数相等,一定是b==c,然后误写成

//错误写法
if(b==c&&a!=b)

但是实际上少考虑了一种情况:a==b&&b!=c

11.2 AC代码

#include<iostream>
using namespace std;

int main()
{
	double a,b,c;
	cin>>a>>b>>c;	
	
	//按降序排列 
	//易出bug点1:
	if(a<b)
		swap(a,b);
	if(a<c)
		swap(a,c);
	
	if(b<c)
		swap(b,c);
	
	//cout<<a<<b<<c<<endl;
	
	if(a>=b+c)
		cout<<"NAO FORMA TRIANGULO"<<endl;
		
	//易出bug点2:
	else
	{
		if(a*a==b*b+c*c)
			cout<<"TRIANGULO RETANGULO"<<endl;
		else if(a*a>b*b+c*c)
			cout<<"TRIANGULO OBTUSANGULO"<<endl;
		else if(a*a<b*b+c*c)
			cout<<"TRIANGULO ACUTANGULO"<<endl;
		
		//易出bug点3:
		if(a==b&&b==c)
			cout<<"TRIANGULO EQUILATERO"<<endl;

		//易出bug点4:
		if((a==b&&b!=c)||(b==c&&a!=b))
			cout<<"TRIANGULO ISOSCELES"<<endl;	
	}		
	return 0;
}

12、游戏时间2

读取四个整数 A,B,C,D,用来表示游戏的开始时间和结束时间。

其中 A 和 B 为开始时刻的小时和分钟数C 和 D 为结束时刻的小时和分钟数

请你计算游戏的持续时间。

比赛最短持续 1 分钟,最长持续 24 小时。

输入格式


共一行,包含四个整数 A,B,C,D。

输出格式

输出格式为 O JOGO DUROU X HORA(S) E Y MINUTO(S),表示游戏共持续了 X 小时 Y 分钟。

数据范围


0≤A,C≤23
0≤B,D≤59

输入样例1:

7 8 9 10

输出样例1:

O JOGO DUROU 2 HORA(S) E 2 MINUTO(S)

输入样例2:

7 7 7 7

输出样例2:

O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)

输入样例3:

7 10 8 9

输出样例3:

O JOGO DUROU 0 HORA(S) E 59 MINUTO(S)

12.1 AC代码

(需要考虑的情况很多)

#include<iostream>
using namespace std;

int main()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;//开始时的小时、分钟,结束时的小时、分钟
	
	//7 7 7 7 
	if(a==c&&b==d)
		cout<<"O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)"<<endl;
	
	//5 8 3 6
	else if(a>c&&b>d)
		cout<<"O JOGO DUROU "<<24-a+c-1<<
		" HORA(S) E "<<60-b+d<<" MINUTO(S)"<<endl;
		
	//5 20 5 17
	else if(a==c&&b>d)
		cout<<"O JOGO DUROU 23 HORA(S) E "
		<<60-b+d<<" MINUTO(S)"<<endl;
		
	//5 8 3 10
	else if(a>c&&b<d)
		cout<<"O JOGO DUROU "<<24-a+c<<
		" HORA(S) E "<<d-b<<" MINUTO(S)"<<endl;
		
	//17 53 17 54
	else if(a==c&&b<d)
		cout<<"O JOGO DUROU 0 HORA(S) E "
		<<d-b<<" MINUTO(S)"<<endl;
		
	//3 8 5 4
	else if(a<c&&b>d)
		cout<<"O JOGO DUROU "<<c-a-1<<
		" HORA(S) E "<<60-b+d<<" MINUTO(S)"<<endl;
		
	//7 8 10 8
	else if(a<c&&b==d)
		cout<<"O JOGO DUROU "<<c-a<<
		" HORA(S) E 0 MINUTO(S)"<<endl;
		
	//3 6 5 9
	else if(a<c&&b<d)
		cout<<"O JOGO DUROU "<<c-a<<
		" HORA(S) E "<<d-b<<" MINUTO(S)"<<endl;
		
	return 0;
}

12.2 通用的简易写法

#include<iostream>
using namespace std;
int main()
{
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    b+=a*60,d+=c*60;//全部转化为分钟 
    
    int sum=(24*60+d-b)%(24*60);
    
    sum=(sum)?(sum):(24*60); //a如果等于0,是个特殊情况 ,说明持续了整整24小时 
    
    printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)\n",sum/60,sum%60);
    return 0;
}

/*
7 8 9 10
*/

13、税(水)

读取一个保留两位小数的浮点数值,表示一个公民的工资。

在公民缴纳个人所得税时,不同收入部分需要缴税的税率也是不同的。

请根据下表确定该公民需要缴纳的个人所得税是多少。

在这里插入图片描述

输入格式

共一行,包含一个浮点数。

输出格式

如果公民需要缴税,则输出所需缴纳的税额。输出格式为 R$ X,其中 X 为个税的金额,保留两位小数。

如果公民不需要缴税,则输出 Isento。

数据范围

0≤公民工资≤5000

输入样例1:

3002.00

输出样例1:

R$ 80.36

输入样例2:

1700.00

输出样例2:

Isento

输入样例3:

4520.00

输出样例3:

R$ 355.60

样例解释

对于样例 1,0∼2000.00 部分不用缴税,2000.01∼3000.00 部分按 8% 的税率缴税,共计
1000×8%=80,3000.01∼3002.00 部分按 18% 的税率缴税,共计 2×18%=0.36,合计 80.36。

对于样例 2,公民收入未超过 2000,所以输出 Isento。

对于样例 3,0∼2000.00 部分不用缴税,2000.01∼3000.00 部分按 8% 的税率缴税,共计
1000×8%=80,3000.01∼4500.00 部分按 18% 的税率缴税,共计 1500×18%=270,4500.01∼4520
部分按 28% 的税率缴税,共计 20×28%=5.60,合计 355.60。

13.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	double n;//工资
	cin>>n;
	
	if(n>0.00&&n<=2000.00)
		printf("Isento\n");
	else if(n>=2000.01&&n<=3000.00)
		printf("R$ %.2lf\n",(n-2000)*0.08);
	else if(n>=3000.01&&n<=4500.00)
		printf("R$ %.2lf\n",1000*0.08+(n-3000)*0.18);
	else if(n>=4500.00)
		printf("R$ %.2lf\n",1000*0.08+1500*0.18+(n-4500)*0.28);
		
	return 0;		 
}

14、简单排序(易错)

读取三个整数并按升序对它们进行排序。

输入格式

共一行,包含三个整数。

输出格式

首先,将三个整数按升序顺序输出,每行输出一个整数。

然后,输出一个空行。

紧接着,将三个整数按原输入顺序输出,每行输出一个整数。

数据范围

−100≤输入整数≤100

输入样例:

7 21 -14

输出样例:

-14

7

21

7

21

-14

14.1 易错点:

	if(a>b)
		swap(a,b);
	if(a>c)
		swap(a,c);
	if(b>c)
		swap(b,c);

错误地写成:

	if(a>b)
		swap(a,b);
	if(b>c)
		swap(b,c);
	if(a>c)
		swap(a,c);
	

因为要将a、b、c进行降序排列,就必须按照a>b、a>c、b>c的判断条件来swap,而不能随意调换顺序

14.2 AC代码

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

int main()
{
	int a,b,c;
	cin>>a>>b>>c;
	
	int a1,b1,c1;
	a1=a;
	b1=b;
	c1=c;
	
	if(a>b)
		swap(a,b);
	if(a>c)
		swap(a,c);
	if(b>c)
		swap(b,c);
		
	cout<<a<<endl<<b<<endl<<c<<endl<<endl;
	cout<<a1<<endl<<b1<<endl<<c1<<endl;
	return 0;	
}

15、一元二次方程公式(水)

读取三个浮点数 a,b,c 的值,利用一元二次方程求根公式对方程 ax2+bx+c=0 进行求解。
在这里插入图片描述

输入格式

输入三个浮点数 a,b,c。

输出格式

参照输出格式,输出方程的根,输出结果保留五位小数,如果无解则输出 Impossivel calcular。

两个根可以按任意顺序输出,都算正确。

数据保证不存在只有一个解的情况。

数据范围

−1000.0≤a,b,c≤1000.0

输入样例:

10.0 20.1 5.1

输出样例:

R1 = -0.29788 R2 = -1.71212

15.1AC代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

int main()
{
	double a,b,c;
	cin>>a>>b>>c;
	
	double m=b*b-4*a*c;
	
	if(m<0||a==0)
		cout<<"Impossivel calcular"<<endl;
	else 
	{
	    printf("R1 = %.5lf\n",(0-b+sqrt(m))/(2*a));
		printf("R2 = %.5lf\n",(0-b-sqrt(m))/(2*a));
	}	
		return 0;
}

16、平均数3(水)

读取 4 个数字 N1,N2,N3,N4,这 4 个数字都是保留 1 位小数的浮点数,对应于学生获得的 4 个分数。

这 4 个分数的权重分别为 2,3,4,1,请你计算学生成绩的平均值 X 并输出 Media: X。

接下来分为以下三种情况:

如果平均值为 7.0 或更高,则输出 Aluno aprovado.。
如果平均值小于 5.0,则输出 Aluno reprovado.。
如果平均值大于等于 5.0 并且小于 7.0,则输出 Aluno em exame.,

并再读取一个数字 Y,然后输出 Nota do exame: Y。

接下来重新计算平均值 Z=(X+Y)/2,
如果 Z 大于或等于 5.0,则输出 Aluno aprovado.,否则输出 Aluno reprovado.。

最后输出 Media final: Z,表示学生的最终成绩。

输入格式

输入中包含四个浮点数,表示学生的四个成绩。

也有部分满足情况 3 的数据,多包含一个浮点数。

输出格式

输出的结果均保留 1 位小数,具体形式参照题目描述和输出样例。

数据范围

0≤输入数据≤10.0

输入样例1:

2.0 4.0 7.5 8.0

6.4

输出样例1:

Media: 5.4

Aluno em exame.

Nota do exame: 6.4

Aluno aprovado.

Media final: 5.9

输入样例2:

2.0 6.6 4.0 9.0

输出样例2:

Media: 4.9

Aluno reprovado.

输入样例3:

9.0 4.0 8.5 9.0

输出样例3:

Media: 7.3

Aluno aprovado.

16.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	double n1,n2,n3,n4;
	cin>>n1>>n2>>n3>>n4;//学生的4个分数
	
	double x=n1*0.2+n2*0.3+n3*0.4+n4*0.1;
	printf("Media: %.1lf\n",x);//输出平均数
	
	if(x>=7.0)
		cout<<"Aluno aprovado." <<endl;
	else if(x<5.0)
		cout<<"Aluno reprovado."<<endl;
	else if(x>=5.0&&x<7.0)
	{
		cout<<"Aluno em exame."<<endl;
		double y;
		cin>>y;
		printf("Nota do exame: %.1lf\n",y);
		double z;
		z=(x+y)/2;
		if(z>=5.0)
			cout<<"Aluno aprovado."<<endl;
		else
			cout<<"Aluno reprovado."<<endl;
			
		//cout<<"Media final: "<<z<<endl;
		printf("Media final: %.1lf\n",z);
		
	}
		
	return 0;	
}

第三讲——循环语句

1、连续奇数的和(易错)

给定两个整数 X 和 Y,输出在他们之间(不包括 X 和 Y)的所有奇数的和。

输入格式

第一行输入 X,第二行输入 Y。

输出格式

输出一个整数,表示所有满足条件的奇数的和。

数据范围

−100≤X,Y≤100

输入样例1:

6

-5

输出样例1:

5

输入样例2:

15

12

输出样例2:

13

输入样例3:

12

12

输出样例3:

0

1.1 AC代码

1.2 注意:

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

int main()
{
    int x,y;
    cin>>x>>y;
    
    if(x>y) //不要写成x<y
        swap(x,y);//降序排列
        
    int sum=0;
    
    //注意:题目要求不包括x、y
    for(int i=x+1;i<y;i++)
    {
        //if(i%2==1)//错误写法?因为i为负数时,i%2==-1
        if(i%2!=0)//正确写法
        //if(i&1) //奇数
            sum+=i;
    }
    cout<<sum<<endl;
    return 0;
}

2、最大数和它的位置(水)

给定 100 个整数,请你找出其中最大的数字,以及它的输入位置(位置从 1 开始)。

输入格式

共 100 行,每行包含一个整数。

输出格式

第一行输出最大的数字。

第二行输出该数字的输入位置。

数据范围

1≤输入数字≤50000, 保证输入数字互不相同。

输入样例:

22229

48558

24992

4755

11923

20213

输出样例:

48558

2

2.1 AC代码

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

int main()
{
	int maxx=-0x3f;
	int index;
	int a[110];
	for(int i=1;i<=100;i++)
	{
		cin>>a[i];
		maxx=max(a[i],maxx);
	}
	for(int i=1;i<=100;i++)
	{
		if(a[i]==maxx)
			index=i;
	}
	cout<<maxx<<endl;
	cout<<index<<endl;
	return 0;
}

3、递增序列(水)

读取一系列的整数 X,对于每个 X,输出一个 1,2,…,X 的序列。

输入格式

输入文件中包含若干个整数,其中最后一个为 0,其他的均为正整数。

每个整数占一行。

对于输入的正整数,按题目要求作输出处理。

对于最后一行的整数 0,不作任何处理。

输出格式

对于每个输入的正整数 X,输出一个从 1 到 X 的递增序列,每个序列占一行。

数据范围

1≤X≤100

输入样例:

5

10

3

0

输出样例:

1 2 3 4 5

1 2 3 4 5 6 7 8 9 10

1 2 3

3.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int x;
	while(1)
	{
		cin>>x;
		if(x==0)
			break;
		else 
		{
			for(int i=1;i<x;i++)
				cout<<i<<" ";
			cout<<x<<endl;
		}
	}
	return 0;
}

3.2 注意

如果输入中:包含若干个整数,则用**while(1)**处理

4、连续整数相加(水)

读入两个整数值 A 和 N,计算从 A 开始的 N 个连续整数的和。

注意,如果读入的 N 为 0 或负数,则继续读取数字直至读入 N 值为正整数为止

输入格式

共一行,包含整数 A 和若干个整数 N(不超过 100 个)。

输出格式

一个整数,表示从 A 开始的 N 个连续整数的和。

数据范围

1≤A≤100,

−100≤N≤100

输入样例1:

3 2

输出样例1:

7

输入样例2:

3 -1 0 -2 2

输出样例2:

7

4.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int a,n;
	cin>>a>>n;
	
	int sum=0;
	if(n<=0)
	{
		while(n<=0)
			cin>>n;
	}
	
	for(int i=a;i<=a+n-1;i++)	//n个数 
	{
		//cout<<i<<endl;
		sum+=i;
	}
	cout<<sum<<endl;
	return 0;
}

5、约数(水)

输入一个整数 N,按照从小到大的顺序输出它的全部约数。

输入格式

一个整数 N。

输出格式

输出全部约数,每个约数占一行。

数据范围

1≤N≤1000

输入样例:

6

输出样例:

1
2
3
6

5.1 AC代码

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

int main()
{
	int n;
	cin>>n;
	
	//从小到大输出n的约数
	for(int i=1;i<=n;i++)
	{
		if(n%i==0)
			cout<<i<<endl;
	}
	 return 0;
}

6、PUM(呜呜不会写)

输入两个整数 N 和 M,构造一个 N 行 M 列的数字矩阵,矩阵中的数字从第一行到最后一行,按从左到右的顺序依次为
1,2,3,…,N×M。

矩阵构造完成后,将每行的最后一个数字变为 PUM。

输出最终矩阵。

输入格式

共一行,包含两个整数 N 和 M。

输出格式

输出最终矩阵,具体形式参照输出样例。

数据范围

1≤N,M≤20

输入样例:

7 4

输出样例:

1 2 3 PUM

5 6 7 PUM

9 10 11 PUM

13 14 15 PUM

17 18 19 PUM

21 22 23 PUM

25 26 27 PUM

6.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n,m;
	int flag=1;
	cin>>n>>m;
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(j!=m-1)
				cout<<flag<<" ";
			else 
				cout<<"PUM"<<endl;
			flag++;
		}
	}
	return 0;
}

7、余数(水)

输入一个整数 N,请按顺序输出 1 到 10000 之间(不包括 1 和 10000)的所有除以 N 余 2 的数字。

输入格式

一个整数 N。

输出格式

输出所有满足条件的数字,从小到大每行输出一个。

数据范围

2<N<10000

输入样例:

13

输出样例:

2

15

28

41

7.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;
	
	for(int i=2;i<10000;i++)
	{
		if(i%n==2)
			cout<<i<<endl;
	}
	return 0;
}

8、六个奇数(有需要注意的点)

读取一个整数 X,输出 X 之后的 6 个奇数,如果 X 也是奇数,那么它也算作 6 个奇数之一。

输入格式

一个整数 X。

输出格式

所有满足条件的奇数,每个占一行。

数据范围

1≤X≤100

输入样例:

9

输出样例:

9

11

13

15

17

19

8.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int x;
	cin>>x;
	if(x&1==1)	//x为奇数 
	{
		for(int i=x;i<=x+10;i+=2)
		{
			cout<<i<<endl;
		}
	}
	
	//注意:不要写成if(x & 1 != 1) 
	else if((x & 1) != 1) 
	{
		for(int i=x+1;i<=x+11;i+=2)
		{
			cout<<i<<endl;
		}
	}
	return 0;
}

8.2 注意

判断是否为奇数时,不要写成

//错误写法
if(x & 1 != 1)

要写成

if((x & 1) != 1)

9、乘法表(水)

输入一个整数 N,输出 N 的乘法表,如下:

1 x N = N
2 x N = 2N

10 x N = 10N

输入格式

一个整数 N。

输出格式

输出 N 的乘法表,具体形式参照输出样例。

数据范围

1<N<1000

输入样例:

140

输出样例:

1 x 140 = 140
2 x 140 = 280
3 x 140 = 420
4 x 140 = 560
5 x 140 = 700
6 x 140 = 840
7 x 140 = 980
8 x 140 = 1120
9 x 140 = 1260
10 x 140 =1400

9.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;
	
	for(int i=1;i<=10;i++)
	{
		cout<<i<<" x "<<n<<" = "<<i*n<<endl;
	}
	return 0;
}

10、实验(水)

医学部一共进行了 N 场动物实验。

共有三种小动物可用来实验,分别是青蛙、老鼠和兔子。

每次实验都会选取其中一种动物来参与实验,选取数量若干。

现在请你统计一下医学部一共用了多少小动物,每种分别用了多少,每种动物使用数量占总量的百分比分别是多少。

输入格式

第一行包含整数 N,表示实验次数。

接下来 N 行,每行包含一个整数 A(表示一次实验使用的小动物的数量)和一个字符 T(表示一次实验使用的小动物的类型,
C表示兔子(coney),R 表示老鼠(rat),F 表示青蛙(frog))。

输出格式

请你参照输出样例,输出所用动物总数,每种动物的数量,以及每种动物所占百分比。

注意输出百分比时,保留两位小数

数据范围

1≤N≤100,

1≤A≤15

输入样例:

10

10 C

6 R

15 F

5 C

14 R

9 C

6 R

8 F

5 C

14 R

输出样例:

Total: 92 animals

Total coneys: 29

Total rats: 40

Total frogs: 23

Percentage of coneys: 31.52 %

Percentage of rats: 43.48 %

Percentage of frogs: 25.00 %

10.1 AC代码

#include<iostream>
using namespace std;
int n,x;
double c,r,f;//动物的数量
int sum;

int main()
{
	cin>>n;
	
	while(n--)
	{
		int A;
		char T;
		cin>>A>>T;
		
		if(T=='C')
		{
			c+=A;
		}
		else if(T=='R')
		{
			r+=A;
		}
		else if(T=='F')
		{
			f+=A;
		}	
	} 
	
	printf("Total: %.0lf animals\n",(c+r+f));//动物总数
	printf("Total coneys: %.0lf\n",c);
    printf("Total rats: %.0lf\n",r);
    printf("Total frogs: %.0lf\n",f);
	
	printf("Percentage of coneys: %.2lf %\n",c/(c+r+f)*100);
	printf("Percentage of rats: %.2lf %\n",r/(c+r+f)*100);
	printf("Percentage of frogs: %.2lf %\n",f/(c+r+f)*100);
	return 0;
}

11、区间2(水)

读取 N 个整数 X1,X2,…,XN,判断这 N 个整数中有多少个在 [10,20] 的范围内,有多少个在范围外。

输入格式

第一行包含整数 N,表示共有 N 个整数需要进行判断。

接下来 N 行,每行包含一个整数 Xi。

输出格式

第一行输出 x in,其中 x 为在范围内的整数的数量。

第二行输出 y out,其中 y 为在范围外的整数的数量。

数据范围

1≤N≤10000,
−107<Xi<107

输入样例:
4
14
123
10
-25
输出样例:
2 in
2 out

11.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	int x[10010];
	int sum=0;
	cin>>n;
	
	for(int i=1;i<=n;i++)
	{
		cin>>x[i];
		if(x[i]>=10&&x[i]<=20)
			sum++;
	}
	cout<<sum<<" in"<<endl;
	cout<<n-sum<<" out"<<endl;
	return 0;
}

12、连续奇数的和2(有点水)

输入 N 对整数对 X,Y,对于每对 X,Y,请你求出它们之间(不包括 X 和 Y)的所有奇数的和。

输入格式

第一行输入整数 N,表示共有 N 对测试数据。

接下来 N 行,每行输入一组整数 X 和 Y。

输出格式

每对 X,Y 输出一个占一行的奇数和。

数据范围

1≤N≤100,

−1000≤X,Y≤1000

输入样例:
7
4 5
13 10
6 4
3 3
3 5
3 4
3 8
输出样例:
0
11
5
0
0
0
12

12.1 AC代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

int main()
{
	int n,x,y;
	cin>>n;
	
	while(n--)
	//for(int i=1;i<=n;i++)
	{
		int sum=0;
		
		cin>>x>>y;//整数对
		if(x>y)
	        swap(x,y);
	
		for(int j=x+1;j<y;j++)
		{
			//if(j%2!=0)
			if(j&1==1)
				sum+=j;	
		} 
		cout<<sum<<endl;
	}
	return 0;
}

13、简单斐波那契数列(水)

以下数列 0 1 1 2 3 5 8 13 21 … 被称为斐波纳契数列。

这个数列从第 3 项开始,每一项都等于前两项之和。

输入一个整数 N,请你输出这个序列的前 N 项。

输入格式

一个整数 N。

输出格式

在一行中输出斐波那契数列的前 N 项,数字之间用空格隔开。

数据范围

0<N<46

输入样例:

5

输出样例:

0 1 1 2 3

13.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int f[100];
	f[0]=0;
	f[1]=1;
	f[2]=1;
	
	//初始化 
	for(int i=3;i<=46;i++)
		f[i]=f[i-1]+f[i-2];
	
	for(int i=0;i<n-1;i++)
	{
		cout<<f[i]<<" ";
	}
	cout<<f[n-1]<<endl;
	return 0;
	
}

14、数字序列和它的和(需要注意一些点)

输入若干个整数对 M,N,对于每个数对,输出以这两个数为最大值和最小值的公差为 1 的等差数列。

注意,当输入整数对中,任意一个数为 0 或负整数时,立即停止输入,且该组数对无需作任何处理。

输入格式

输入共若干行,每行包含两个整数。

最后一行的两个整数中,至少有一个是非正整数。

输出格式

对于每组需作处理的数对,输出一个结果,每个结果占一行。

结果包含从最小值到最大值的数字序列以及数字序列各数字之和。

具体格式请参照输出样例。

数据范围

M,N≤100

输入样例:
2 5
6 3
5 0
输出样例:
2 3 4 5 Sum=14
3 4 5 6 Sum=18

14.1 AC代码

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

int  main()
{
	int n,m;
	
	//注意多组输入 
	while(cin >> m >> n, m>0 && n > 0)
	{
	    int sum=0;
		if(m>n)
			swap(m,n);
		for(int i=m;i<=n;i++)
		{
			cout<<i<<" ";
			sum+=i;
		}
		cout<<"Sum="<<sum<<endl;
	}
	return 0;
}

14.2 注意

多组输入时,由于题目要求:任意一个数为 0 或负整数时,立即停止输入,因此

while(cin >> m >> n, m>0 && n > 0)

15、完全数(不好写)

一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。

例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6。

现在,给定你 N 个整数,请你依次判断这些数是否是完全数。

输入格式

第一行包含整数 N,表示共有 N 个测试用例。

接下来 N 行,每行包含一个需要你进行判断的整数 X。

输出格式

每个测试用例输出一个结果,每个结果占一行。

如果测试数据是完全数,则输出 X is perfect,其中 X 是测试数据。

如果测试数据不是完全数,则输出 X is not perfect,其中 X 是测试数据。

数据范围
1≤N≤100,
1≤X≤108
输入样例:
3
6
5
28
输出样例:
6 is perfect
5 is not perfect
28 is perfect

15.1 Time Limit Exceeded 代码

#include<iostream>
using namespace std;

int n,x;
long long sum;

int main()
{
	cin>>n;
	while(n--)
	{
		cin>>x;
		sum=0;
		for(int i=1;i<x;i++)
		{
			if(x%i==0)
				sum+=i;
		}
	
		if(sum==x)
			cout<<x<<" is perfect"<<endl;
		else
			cout<<x<<" is not perfect"<<endl;
	}
	
}

15.2 AC代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	cin >> n;
	while (n -- )
	{
		int x;
		int res = 1;
		cin >> x;

		//当sqrt(x)的前半部分有 一个约数i时
		//sqrt(x)的后半部分就有 另一个相对应的约数c 
		//如:x=8, i=2,c=4
		for(int i = 2; i * i <= x; i ++)
		{
			if(x % i == 0)//i为约数 
			{
				res+=i;
				
				/*
				若一个数i是n的约数,也就是i能整数n, 
				那么n/i=c,这个c就是n的另一个约数,
				可以有效减少复杂度 
				*/
				if(i != x / i)
					res += x / i;
			}
		}

		if(res == x && x != 1)
			cout<<x<<" is perfect"<<endl;
		else
			cout<<x<<" is not perfect"<<endl;
	}
}

16、质数(水)

在这里插入图片描述
输入样例:
3
8
51
7
输出样例:
8 is not prime
51 is not prime
7 is prime

16.1 AC代码

#include<iostream>
using namespace std;

int main()
{
	int n,x;
	
	cin>>n;
	while(n--)
	{
		cin>>x;
		int flag=1;
		
		//记得 i*i<=x不要写成i*i<x,不然就错了 ,如x=361 
		for(int i=2;i*i<=x;i++)
		{
			if(x%i==0)//不是质数 
			{
				flag=0;
				break;
			}			
		}
		
		if(flag==1)
			cout<<x<<" is prime"<<endl;
		else
			cout<<x<<" is not prime"<<endl;
	}
	return 0;
} 

17、菱形(困难)

在这里插入图片描述

17.1 题解

根据曼哈顿距离
|x-i| + |y-j| <= n / 2

在这里插入图片描述

在这里插入图片描述

17.2 AC代码

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int n;
	cin >> n;

	int sx = n / 2, sy = n / 2;

	for (int i = 0; i < n ; i ++ )
	{
		for (int j = 0; j < n; j ++ )
		{
			if ( abs(sx - i) + abs(sy - j) <= n / 2 )
				cout << "*";
			else
				cout << " ";
		}
		cout << endl;//记得输出完一行后换行 
	}

	return 0;
}

第四章——数组(水)

1、数组替换

在这里插入图片描述

输入样例:
10
-9
0
-4
-10
0
-2
-7
7
4
#include<iostream>
using namespace std;

int main()
{
	int a[20];
	for(int i=0;i<10;i++)
	{
		cin>>a[i];
		if(a[i]<=0)
			a[i]=1;
	}
	
	for(int i=0;i<10;i++)
		cout<<"X["<<i<<"] = "<<a[i]<<endl;
		
	return 0;
}

数组变换

在这里插入图片描述

#include<iostream>
using namespace std;

int main()
{
	int a[50];
	int b[50];
	
	for(int i=0;i<20;i++)
	{
		cin>>a[i];
		b[19-i]=a[i];
	}
			
	for(int i=0;i<20;i++)
				cout<<"N["<<i<<"] = "<<b[i]<<endl;
	return 0;
}

2、数组填充(水)

在这里插入图片描述

#include<iostream>
using namespace std;

int main()
{
	int v;
	cin>>v;
	
	int a[100];
	a[0]=v;
	
	for(int i=1;i<10;i++)
	{
		a[i]=a[i-1]*2;
	}
	
	for(int i=0;i<10;i++)
	{
		cout<<"N["<<i<<"] = "<<a[i]<<endl;
	}
	return 0;
	
}

3、数组选择(水)

在这里插入图片描述

#include<iostream>
using namespace std;

int main()
{
	double a[110];
	
	for(int i=0;i<100;i++)
	{
		cin>>a[i];
		if(a[i]<=10.0)
			printf("A[%d] = %.1lf\n",i,a[i]);
	}
	return 0;
}

4、数组中的行

在这里插入图片描述

输入样例:
7
S
8.3 -9.4 -5.6 9.9 2.2 3.2 6.9 7.7 -2.9 -6.3 3.9 -1.4
-0.5 4.3 -0.3 2.3 0.7 -3.1 -6.3 5.7 -7.7 -3.7 9.7 3.8
5.8 -9.1 3.5 7.0 2.5 -2.3 6.9 2.7 5.8 -4.6 -7.8 4.3
-1.7 -8.9 -2.6 7.5 -9.6 6.4 -4.7 -8.0 0.6 6.7 -1.8 -0.4
-9.8 8.9 -3.8 -2.1 5.8 -9.4 1.3 6.3 -1.3 -6.3 -6.6 8.8
-6.3 -7.2 -6.3 -5.9 6.2 9.3 2.0 -4.3 2.7 3.6 -4.6 8.7
3.8 7.4 8.7 -2.8 6.0 -9.2 1.9 3.1 -7.2 -6.0 9.7 -8.4
-9.8 6.6 8.6 2.3 1.1 -2.9 6.6 -1.5 2.1 -5.1 6.4 -7.5
-0.6 -1.6 9.5 -6.6 3.0 3.4 -7.5 -7.9 3.1 2.0 1.7 -7.6
-9.0 9.4 6.6 -0.2 1.4 6.5 8.6 2.0 -1.3 0.2 4.0 -2.4
-7.3 -6.3 -8.6 -7.5 8.5 1.4 -3.3 7.1 0.8 3.3 3.0 0.1
3.3 9.0 1.7 5.2 -3.7 8.9 3.8 -7.4 -2.8 0.6 -2.4 7.1
#include<iostream>
using namespace std;

int main()
{
	double a[20][20];
	int l;
	cin>>l;
	
	char c;
	cin>>c;

	for(int i=0; i<12; i++)
		for(int j=0; j<12; j++)
			cin>>a[i][j];

	double sum=0,ans=0;
	
	for(int m=0; m<12; m++)
		sum+=a[l][m];

	if(c=='S')
		ans=sum;
	else if(c=='M')
		ans=sum/12.0;
	printf("%.1lf\n",ans);

	}

5、数组的右上半部分(中等)

在这里插入图片描述

输入样例:
M
-6.5 8.2 0.7 9.0 0.8 -4.3 0.9 -0.0 -7.9 7.1 -1.6 4.6
-9.4 -9.0 1.5 -9.0 -5.1 -0.5 -2.8 -9.1 8.0 -6.9 -5.5 -6.6
-6.8 0.3 3.8 6.1 -9.9 -9.3 8.5 8.6 5.0 6.9 -3.6 -3.0
-0.8 -1.6 -7.3 -6.7 4.4 -9.1 -9.0 1.6 0.3 -6.0 6.0 -0.8
-0.8 -6.0 -4.9 -3.9 6.4 6.2 -4.2 -0.9 7.9 1.6 -8.2 -9.2
7.8 -5.8 -5.8 -5.8 7.2 0.5 -7.9 1.2 -6.8 -9.1 0.3 -1.4
4.3 -7.2 3.5 -6.4 -9.1 -6.0 3.5 -5.1 -5.6 -6.9 -9.1 -2.1
-7.6 -7.1 0.7 -1.7 5.0 -9.0 1.4 -6.2 7.6 4.8 -7.5 4.0
-0.2 0.3 -4.2 8.4 0.7 -6.4 -2.7 3.5 -0.9 3.7 0.9 -2.7
7.1 0.1 8.4 -5.1 -7.9 -0.5 -5.3 -5.7 -4.6 9.6 -8.3 7.0
9.6 -9.8 3.3 -9.9 -6.8 6.7 3.1 1.2 -9.5 -4.3 -1.7 -9.7
1.8 5.0 8.3 -0.7 -0.9 3.2 2.5 0.5 7.3 8.3 0.3 0.9
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((11+1)*11)/2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			if(j>i)//关键
				sum+=m[i][j];
		}
	}
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
	
}

6、数组的右下半部分

在这里插入图片描述

输入样例:
S
9.7 -4.9 6.1 -6.1 -9.6 1.0 -3.2 0.6 3.2 -9.8 4.9 1.2
-2.8 -5.3 2.8 -1.9 -5.4 7.5 -2.0 5.7 2.3 5.3 -7.5 8.9
6.0 4.3 3.8 -6.7 8.1 -0.5 7.8 -2.2 -1.0 4.0 -4.9 -9.4
5.4 3.7 -6.5 -3.9 -3.3 4.1 -2.5 -4.7 8.2 1.4 1.8 4.7
2.4 9.0 -4.3 9.6 8.6 -6.1 -7.4 8.6 5.6 0.5 -0.4 5.2
-5.2 2.9 -5.6 4.0 -0.2 3.8 -4.1 -1.6 -3.8 -3.1 -1.1 3.3
-9.4 -1.4 0.6 6.5 -4.3 -8.3 6.1 2.9 -5.2 2.5 9.8 -7.7
-2.9 -3.6 7.9 -5.8 -4.7 8.2 -6.2 1.0 7.4 -1.0 -4.4 -4.5
0.1 9.5 4.9 1.5 0.8 -8.2 0.4 9.5 -0.8 -0.9 9.7 -2.1
0.1 -7.6 7.8 -6.9 5.5 1.4 4.0 7.8 1.0 -1.2 9.7 -1.9
-4.6 2.3 -5.5 8.2 -4.8 -3.7 5.4 0.2 -2.4 -0.8 7.4 0.0
-0.1 8.2 0.8 -3.5 -7.6 -0.5 5.6 8.4 -8.6 0.9 9.0 -7.5
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((11+1)*11)/2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			if(i+j>=12)//关键
				sum+=m[i][j];
		}
	}
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
	
}

7、数组的左上半部分

在这里插入图片描述

输入样例:
M
-0.4 -7.7 8.8 1.9 -9.1 -8.8 4.4 -8.8 0.5 -5.8 1.3 -8.0
-1.7 -4.6 -7.0 4.7 9.6 2.0 8.2 -6.4 2.2 2.3 7.3 -0.4
-8.1 4.0 -6.9 8.1 6.2 2.5 -0.2 -6.2 -1.5 9.4 -9.8 -3.5
-2.3 8.4 1.3 1.4 -7.7 1.3 -2.3 -0.1 -5.4 -7.6 2.5 -7.7
6.2 -1.5 -6.9 -3.9 -7.9 5.1 -8.8 9.0 -7.4 -3.9 -2.7 0.9
-6.8 0.8 -9.9 9.1 -3.7 -8.4 4.4 9.8 -6.3 -6.4 -3.7 2.8
-3.8 5.0 -4.6 2.0 4.0 9.2 -8.9 0.5 -3.9 6.5 -4.3 -9.9
-7.2 6.2 -1.2 4.1 -7.4 -4.6 4.7 -0.4 -2.2 -9.1 0.4 -5.8
9.1 -6.4 9.2 0.7 10.0 -5.7 -9.7 -4.4 4.7 4.7 4.9 2.1
-1.2 -6.2 -8.2 7.0 -5.3 4.9 5.5 7.2 3.4 3.2 -0.2 9.9
-6.9 -6.2 5.1 8.5 7.1 -0.8 -0.7 2.7 -6.0 4.2 -8.2 -9.8
-3.5 7.7 5.4 2.8 1.6 -1.0 6.1 7.7 -6.5 -8.3 -8.5 9.4
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((11+1)*11)/2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			if(i+j<=10)//关键
				sum+=m[i][j];
		}
	}
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	return 0;	
}

8、数组的左下半部分

在这里插入图片描述

输入样例:
S
8.7 5.6 -2.0 -2.1 -7.9 -9.0 -6.4 1.7 2.9 -2.3 8.4 4.0
-7.3 -2.1 0.6 -9.8 9.6 5.6 -1.3 -3.8 -9.3 -8.0 -2.0 2.9
-4.9 -0.5 -5.5 -0.2 -4.4 -6.1 7.6 6.9 -8.0 6.8 9.1 -8.5
-1.3 5.5 4.6 6.6 8.1 7.9 -9.3 9.6 4.6 0.9 -3.5 -4.3
-7.0 -1.2 7.0 7.1 -5.7 7.8 -2.3 4.3 0.2 -0.4 -6.6 7.6
-3.2 -5.4 -4.7 4.7 3.6 8.8 5.1 -3.1 -2.9 2.8 -4.3 -1.4
-1.8 -3.3 -5.6 1.8 8.3 -0.5 2.0 -3.9 -1.0 -8.6 8.0 -3.3
-2.5 -9.8 9.2 -0.8 -9.4 -0.5 1.6 1.5 3.4 -0.1 7.0 -6.2
-1.0 4.9 2.2 -8.7 -0.9 4.8 2.3 2.0 -3.2 -7.5 -4.0 9.9
-1.1 -2.9 8.7 3.6 7.4 7.8 10.0 -9.0 1.6 8.3 6.3 -5.8
-9.9 0.6 2.0 -3.8 -6.3 0.6 7.3 3.8 -7.1 9.5 2.2 1.3
-2.8 -9.1 7.1 -0.2 0.6 -6.5 1.1 -0.1 -3.6 4.0 -5.4 1.1
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((11+1)*11)/2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			if(j<i)//关键
				sum+=m[i][j];
		}
	}
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	return 0;
}

9、数组的上方区域

在这里插入图片描述

输入样例:
S
-4.8 -8.0 -2.9 6.7 -7.0 2.6 6.5 1.7 1.9 5.6 -1.6 -6.3
-4.3 1.5 8.7 -0.3 5.4 -9.3 4.8 7.0 3.6 -8.3 -1.0 1.3
-9.9 9.7 -6.3 5.8 2.9 2.9 -7.7 4.9 -0.6 7.2 6.4 7.7
2.8 -5.8 -0.0 2.2 4.0 7.7 -3.0 -7.5 -3.5 9.7 -4.3 -8.6
-1.8 -0.1 5.4 0.6 9.9 -3.7 -1.1 0.8 -0.2 -0.0 9.9 4.5
3.0 -3.9 2.1 -9.7 5.5 9.4 -4.6 3.3 -9.6 5.1 -4.5 1.5
4.3 -5.4 -7.9 9.2 -7.7 -9.6 -1.5 -1.6 -7.2 2.0 -3.7 -0.7
8.0 2.8 -4.1 7.1 8.4 -5.6 3.9 -9.7 -1.1 3.0 -8.5 -3.3
1.7 5.1 0.1 9.2 4.5 9.7 7.2 8.6 8.7 1.1 6.7 0.3
-3.6 -7.1 -8.9 7.1 -5.9 1.6 -7.4 6.7 3.9 4.3 -2.4 -3.7
8.9 -6.2 5.0 -8.6 -1.3 -8.8 2.6 8.9 5.5 9.0 -2.2 -4.4
5.7 3.7 1.8 -2.1 -7.3 -7.9 4.7 6.0 3.3 -2.8 1.4 -6.9
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((5+1)*5)/2*2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			
			if(i<j&&(i+j)<11&&i<6)
				sum+=m[i][j];
		}
	}
		
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
}

10、数组的下方区域

在这里插入图片描述

输入样例:
S
-6.0 0.7 -8.4 -5.7 -4.1 7.6 9.5 -9.7 4.1 0.6 -6.5 -4.9
6.6 4.9 -3.1 5.3 0.3 -4.5 3.9 -1.5 6.6 7.0 5.1 2.5
-8.5 1.8 -2.7 0.1 -4.9 -7.2 4.3 6.0 -1.4 2.7 -3.0 2.0
4.8 -7.0 -1.3 0.8 1.0 4.5 -1.1 -2.9 -3.9 -3.9 -8.9 5.8
-2.1 -9.6 5.1 0.2 1.0 -1.7 6.4 4.1 2.8 -6.9 2.4 9.3
-6.0 -9.1 -7.0 -7.0 7.8 5.1 6.9 -7.6 0.4 -7.2 5.5 6.0
-1.9 5.5 1.9 -8.5 -5.3 2.3 -9.3 2.0 -0.2 1.2 5.6 -1.8
8.2 2.3 3.5 1.4 4.0 -5.1 -6.9 -2.8 1.7 -7.0 7.8 1.8
-6.0 -4.1 -4.6 -9.4 -4.9 -4.1 4.2 6.3 -2.8 8.7 8.1 -0.9
8.8 -6.5 -4.3 6.1 -6.2 -3.9 -7.0 7.3 5.0 -0.9 -0.0 5.6
-2.4 1.4 8.5 -2.2 0.9 5.3 3.6 8.8 -8.1 3.0 -3.1 6.5
-3.8 -6.4 2.3 4.2 -9.8 -0.3 -9.9 -7.4 3.5 1.5 -0.2 7.0
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((5+1)*5)/2*2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			
			if(i>j&&i+j>11)
				sum+=m[i][j];
		}
	}
		
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
}

数组的左方区域

在这里插入图片描述

输入样例
S
4.7 -3.3 -2.3 4.5 -7.0 8.7 -4.1 -3.0 -7.6 6.3 -6.6 -4.7
-7.2 9.3 -7.6 9.1 9.2 9.0 5.5 -7.5 -9.3 -1.6 -3.5 -4.2
0.5 -7.5 -8.3 -9.0 -6.4 3.8 0.1 -3.5 7.9 2.1 2.4 -6.2
7.0 5.7 -9.0 -5.8 1.6 2.6 -9.2 -6.2 4.6 8.2 -8.3 -1.4
3.8 -9.9 6.2 -2.5 -3.5 9.4 1.6 7.0 3.3 -0.5 6.7 6.0
1.6 -3.8 5.0 8.8 4.2 7.7 0.7 7.4 7.9 -5.9 4.4 3.3
3.7 6.2 6.7 -1.4 6.1 -6.0 8.5 9.1 5.7 -4.2 5.9 -3.5
5.0 0.3 2.2 -3.6 6.3 -10.0 9.5 -4.7 2.7 8.1 7.5 -8.4
-5.7 -0.3 -3.7 -3.3 7.7 9.3 -1.3 1.0 0.3 1.9 9.9 9.0
-7.4 1.3 -9.6 -3.6 2.2 3.4 -3.6 3.5 8.3 0.5 9.7 -6.8
1.0 -2.7 -1.5 5.4 -6.5 -3.7 5.6 8.0 -9.9 0.1 2.2 7.6
5.6 4.3 1.5 -0.8 5.8 -5.1 5.5 6.2 -5.8 8.8 -0.6 -2.3
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((5+1)*5)/2*2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			
			if(i>j&&(i+j)<11&&j<6)
				sum+=m[i][j];
		}
	}
		
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
}

数组的右方区域

在这里插入图片描述

输入样例:
S
2.4 7.8 9.4 -5.6 6.9 -4.9 4.8 0.8 3.6 1.7 -1.4 9.7
-6.8 -3.7 -2.0 -4.9 -4.5 -5.3 6.1 7.5 -4.3 5.9 -9.5 9.7
-6.5 -0.4 1.6 3.7 -4.4 -3.3 1.9 7.7 -1.4 4.5 7.4 -3.0
-1.2 0.4 9.8 9.8 -4.3 -1.3 -1.6 0.5 2.8 -4.0 8.5 3.9
0.2 -2.0 -6.4 -9.8 3.7 -2.0 1.7 -3.6 -3.4 2.4 -1.2 -3.9
-8.3 5.8 -1.0 -4.4 1.0 -2.4 2.8 -4.6 2.1 8.7 -6.8 -8.3
6.3 -6.8 -7.0 9.3 -7.7 -1.7 8.2 -6.5 -1.8 6.7 8.2 4.4
0.4 8.6 -1.2 8.6 -4.6 1.8 9.6 1.6 2.0 -1.0 3.9 -9.2
7.5 -3.1 6.2 -4.5 -3.0 2.5 -7.7 2.9 0.3 3.3 -2.7 3.4
-5.0 3.0 -0.0 4.3 9.5 -0.0 -9.9 -8.6 -0.9 -5.5 7.7 6.5
4.9 -9.6 -2.9 8.5 2.0 -9.9 -4.9 -1.5 -2.4 -7.6 1.7 8.5
-6.4 6.8 -3.7 -4.7 0.2 5.8 -5.4 0.6 7.0 -4.2 -7.5 -2.4
#include<iostream>
using namespace std;

int main()
{
	double m[20][20];
	char c;
	cin>>c;
	
	double sum=0;
	int geshu=((5+1)*5)/2*2;
	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			cin>>m[i][j];
			
			if(j>i&&i+j>11)
				sum+=m[i][j];
		}
	}
		
	if(c=='S')
		printf("%.1lf\n",sum);
	else if(c=='M')
		printf("%.1lf\n",sum/geshu);
	
}

平方矩阵|(困难)

在这里插入图片描述

平方矩阵||

在这里插入图片描述

输入样例:
1
2
3
4
5
0

平方矩阵|||

在这里插入图片描述

输入样例:
1
2
3
4
5
0

蛇形矩阵

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值