题目描述1
三角形面积=SQRT(S*(S-a)(S-b)(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带实参的宏名来求面积area。
输入
a b c三角形的三条边,可以是小数。
输出
三角形面积,保留3位小数
样例输入
3 4 5
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
#define s(a,b,c) {S=((a)+(b)+(c))/2;}
#define sarea(a,b,c,S){ area=sqrt(S*(S-a)*(S-b)*(S-c));}
int main()
{
float a,b,c,S,area;//要定义t
cin>>a>>b>>c;
s(a,b,c);
sarea(a,b,c,S);
cout<<fixed<<setprecision(3)<<area<<endl;
}
题目描述2
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
输入
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成
输出
按照学号升序排列的数据
样例输入
2 3
5 100
6 89
3 82
4 95
2 10
样例输出
2 10
3 82
4 95
5 100
6 89
#include <iostream>
using namespace std;
struct list1{
int number;
int grade;
};
int main( )
{
int a,b;
list1 n[1000],m[1000],h[1000];
cin>>a>>b;
for(int i=0;i<a;i++)
{
cin>>n[i].number>>n[i].grade;
// cout<<n[i].number<<" "<<n[i].grade<<endl;
}
for(int i=a;i<b+a;i++)
{
cin>>m[i].number>>m[i].grade;
// cout<<m[i].number<<" "<<m[i].grade<<endl;
}
for(int i=0;i<a+b;i++)
{
if(i<a)
{
h[i].number=n[i].number;
h[i].grade=n[i].grade;
}
else if(a<=i&&i<a+b)
{
h[i].number=m[i].number;
h[i].grade=m[i].grade;
}
}
for(int i=0;i<a+b;i++)
{
//cout<<h[i].number<<" "<<h[i].grade<<endl;
}
for(int i=0;i<a+b;i++)
{
for(int j=0;j<a+b-1;j++)
{
int t,t1;
if(h[j].number>h[j+1].number)
{
t=h[j+1].number;
t1=h[j+1].grade;
h[j+1].number=h[j].number;
h[j+1].grade=h[j].grade;
h[j].number=t;
h[j].grade=t1;
}
}
}
for(int i=0;i<a+b;i++)
{
cout<<h[i].number<<" "<<h[i].grade<<endl;
}
}
题目描述3
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
输入
学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出
各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入
2
1 blue 90 80 70
b clan 80 70 60
样例输出
85 75 65
#include<iostream>
using namespace std;
struct stu{
string number;
string name;
int a[3];
};
int main()
{
int n;
cin>>n;
stu b[n];
int sum=0;
int sum1=0;
int sum2=0;
int count=0;
int count1=0;
int c[n];
for(int i=0;i<n;i++)
{
cin>>b[i].number>>b[i].name;
for(int j=0;j<3;j++)
{
cin>>b[i].a[j];
}
}
for(int i=0;i<n;i++)
{
sum=sum+b[i].a[0];
}
sum=sum/n;
cout<<sum<<" ";
for(int i=0;i<n;i++)
{
sum1=sum1+b[i].a[1];
}
sum1=sum1/n;
cout<<sum1<<" ";
for(int i=0;i<n;i++)
{
sum2=sum2+b[i].a[2];
}
sum2=sum2/n;
cout<<sum2<<" ";
cout<<endl;
for(int i=0;i<n;i++)
{
count=0;
for(int j=0;j<3;j++)
{
count=count+b[i].a[j];
}
c[i]=count;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1;j++)
{
int t;
if(c[j]>c[j+1])
{
t=c[j+1];
c[j+1]=c[j];
c[j]=t;
}
}
}
for(int i=0;i<n;i++)
{
count1=0;
for(int j=0;j<3;j++)
{
count1=count1+b[i].a[j];
}
if(count1==c[n-1])
{
cout<<b[i].number<<" "<<b[i].name<<" ";
for(int j=0;j<3;j++)
{
cout<<b[i].a[j]<<" ";
}
break;
}
}
}
题目描述4
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
样例输入
3
10
81
0
样例输出
1
5
40
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
int sum=0;
int t;
t=n%3;
while(1)
{
if(n==1)
{
break;
}
else if(n%3==0)
{
n=n/3;
sum=sum+n;
}
else if(n==2)
{
sum=sum+1;
break;
}
else if(n%3!=0)
{
int h=n%3;
n=n/3;
sum=sum+n;
n=h+n;
}
}
cout<<sum<<endl;
}
}