2018北邮网研机试

2018北邮网研机试

problemA:

题目:
类似超市结账,计算购买的商品的总价格。
输入:
第一行为测试数据组数 T(0< T <= 10) 每组数据第一行为购买商品的种类 n,接下来 n 行,每行两个数据,第一个为商品价格,第 二个为商品数量,价格为实型。

输出:
每一行输出相对应数据的总价值,保留两位小数。
测试数据:
2
2
1.00 2
0.50 2
1
100.0 1
输出:
3.00
100.00

#include<stdio.h>
int main(){
	int T;
	while(scanf("%d",&T)!=EOF){
		while(T--){
			int n;
			scanf("%d",&n);//商品种类 
			float sum=0;
			while(n--){
				float x;
				int count;
				scanf("%f%d",&x,&count);//商品价格,数量 
				sum+=x*count;
			}
			printf("%.2f\n",sum);//保留两位小数 
		}
	}
	return 0;
} 

problemB:

ProblemB V字型数列,当且仅当三元组i<j<k,且 a[i]>a[j]并且a[k]>a[j],算作一个V型数列。
输入
第一行为测试数据组数T
每组数据第一行为该数组的数字个数
接下来一行为数组元素
输出:
输出对应数组中符合v字形数列的个数

测试数据:
2
3
2 1 2
5
2 1 2 1 2
输出:
1
4

#include<stdio.h>
int main(){
	int T;
	scanf("%d",&T);//T组数据 
	while(T--){
		int n;
		int a[1000];
		scanf("%d",&n);//n个数 
		for(int i=0;i<n;i++)
			scanf("%d",&a[i]);
			int count=0; 
			for(int i=0;i<n-2;i++){
				for(int j=i+1;j<n-1;j++){
					for(int k=j+1;k<n;k++){
						if(i<j&&j<k&&a[i]>a[j]&&a[k]>a[j])//满足i<j<k,且 a[i]>a[j]并且a[k]>a[j] 
							count++;
					}
				}
			}
			printf("%d\n",count);
		}
	return 0;
} 

problemC

C简单的24点
输入为4个数字,a,b,c,d。若a^ b^ c^d=24,则称该数组满足24点,其中 ^可以为+、-、*、/任一个,若不能得到结果24,则称该数组不满足24点。(计算为实型)
输入:
第一行为测试组数t
接下来t行,每一行为四个整数a,b,c,d,测试是否满足24点
1<=a,b,c,d<10000(右区间忘了,反正四个数不为0)
输出
在每一行
若满足,输出YES
不满足,输出NO

此题没想到什么好办法,只有我的暴力64个if。代码就不贴了感觉有点丢人,哈哈!!但我感觉如果真在机试中没什么好办法,用此种办法也不是很慢,毕竟复制粘贴。

problemD

D 最大价值
对于每一个零件都有一个适宜温度区间,[Ri,Ji],当温度t<Ri,零件价值为x,当t>Ji,零件价值为z;当温度适宜,价值为y。且y>x,y>z。此刻,有一恒温箱,可确定温度t。
输入
第一行按顺序分别为 n,x,y,z。0<n<20000
接下来n行为 每一个零件的适宜温度区间0<Ri<Ji<109
输出
确定一个温度值t,在这温度下所有零件的总价值最大,并输出该价值

测试数据
3 1 3 2
1 4
2 5
7 10
输出
7

#include "stdio.h"
typedef struct Tem
{
	int l;				//温度左区间 
	int r;				//温度右区间 
}Tem;
Tem tem[20001];
int main()
{
	int n,x,y,z;
	int max=0;
	scanf("%d%d%d%d",&n,&x,&y,&z);	//输入第一行数字 
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&tem[i].l,&tem[i].r);//输入温度区间 
		if(tem[i].r>max)
		{
			max = tem[i].r;					//记录最大温度 
		}
	}
	int sum=0,t=0;
	for(int j=0;j<max;j++)					//遍历所有的温度,对每个温度都计算一次价值 
	{
		sum=0;
		for(int i=0;i<n;i++)				//遍历所有区间 
		{
			if(tem[i].l>j&&tem[i].r>j)
			    sum+=x;
			else if(j>tem[i].l&&tem[i].r<j)
			    sum+=z;
			else 
			    sum+=y; 
		}
		if(t<sum)
		    t = sum; 			//获取最大价值 
	} 
	printf("%d\n",t);
	return 0;
}  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值