C++文件读写

1.有8个学生,有如下信息:名字,年龄,成绩。从键盘输入8位同学的信息,存入cs.txt,再从文件中读取数据,对8位同学按成绩由高到低排序,输出成绩第二高的学生信息。

#include "stdafx.h"
#include<iostream>
#include<algorithm>
#include<fstream>
#include<string>
using namespace std;
 struct student//用结构体保存学生信息
{
	string name;
	int age;
	int grade;
}stu[8];
bool cmp(student s1,student s2)
{
	return s1.grade>s2.grade;//按成绩排序
}
int _tmain(int argc, _TCHAR* argv[])
{
	ofstream out("cs.txt");
	if(out.is_open())
	{
		string name;int age;int grade;
		for(int i=0;i<8;i++)
		{
			cin>>name;out<<name<<" ";
			cin>>age;out<<age<<" ";
			cin>>grade;out<<grade<<endl;
		}
		out.close();
	}
	ifstream in("cs.txt");
	if(in.is_open())
	{
		for(int i=0;i<8;i++)
		{
			in>>stu[i].name;
			in>>stu[i].age;
			in>>stu[i].grade;
		}
		in.close();
	}
	sort(stu,stu+8,cmp);
	cout<<stu[1].name<<" ";
	cout<<stu[1].age<<" ";
	cout<<stu[1].grade<<endl;
	system("pause");
	return 0;

2.一个公司下面有N个部门,现在要给每个部门分配任务,分配任务只能按照分配的顺序进行,不能同时分配两个任务,只能一个接一个的分配,但是分配完任务后,该部门可以立刻执行(不间断)。分配一个任务的时间是a,执行的时间是b。你需要做的就是决定分配给每一个部门任务的顺序,使得所有部门完成任务的总时间最短。

 输入 input.txt
 3                 (代表3个部门)
 2 2
 3 4
 1 5               (第一组数据,前面为分配时间,后面为执行时间)
 
 2 4
 4 2
 3 3             	(第二组数据)
 1
 输出 output.txt
 Case 1: 8
 Case 2: 11
#include "stdafx.h"
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;

struct info//用结构体实现执行顺序
{
	int num;//部门编号
	int value;//部门的价值(执行时间-分配时间)
}arr1[3],arr2[3];//两组数据
bool cmp(info i1,info i2)//按价值降序排序
{
	return i1.value>i2.value;
}
int _tmain(int argc, _TCHAR* argv[])
{
	ifstream in("input.txt");
	if(!in.is_open())
		exit(-1);
	int x;in>>x;//读取第一行的3
	int a[3][2],b[3][2];
	for(int i=0;i<3;i++)//数组a保存第一组数据
	{
		for(int j=0;j<2;j++)
			in>>a[i][j];
	}
	for(int i=0;i<3;i++)//数组b保存第二组数据
	{
		for(int j=0;j<2;j++)
			in>>b[i][j];
	}
	in.close();
	for(int i=0;i<3;i++)
	{
		arr1[i].num=i;//保存部门的顺序编号
		arr1[i].value=a[i][1]-a[i][0];//保存部门价值
	}
	sort(arr1,arr1+3,cmp);//按价值高到低排序
	int index1[3];//获取执行顺序
	for(int i=0;i<3;i++)
	{
		index1[i]=arr1[i].num;
	}
	int time1=a[index1[0]][0],val1=a[index1[0]][1];
	int sum1=time1+val1;
	for(int i=1;i<3;i++)
	{
		time1+=a[index1[i]][0];//分配时间累加
		val1=a[index1[i]][1];//每次的执行时间
		int x=time1+val1-sum1;//分配时间+当前执行时间>总花费时间
		if(x>0);
		sum1+=x;//更新总花费时间
	}
	//处理第二组数据
	for(int i=0;i<3;i++)
	{
		arr2[i].num=i;arr2[i].value=b[i][1]-b[i][0];
	}
	int index2[3];
	sort(arr2,arr2+3,cmp);
	for(int i=0;i<3;i++)
	{
		index2[i]=arr2[i].num;
	}
	int time2=b[index2[0]][0],val2=b[index2[0]][1];
	int sum2=time2+val2;
	for(int i=1;i<3;i++)
	{
		time2+=b[index2[i]][0];
		val2=b[index2[i]][1];
		int x=time2+val2-sum2;
		if(x>0);
		sum2+=x;
	}
	ofstream out("output.txt");
	if(out.is_open())
	{
		out<<"Case 1:"<<sum1<<endl;
		out<<"Case 2:"<<sum2<<endl;
		out.close();
	}
	system("pause");
	return 0;
}

3.循环矩阵(第一列和最后一列是相邻的),求该矩阵中最大子矩阵(就是子矩阵中的元素和最大);输入的数据在文件input.txt中读取,输出的结果存入output.txt中。

输入数据的格式如下:(中间只能一个空格,否则就不能存入数组中)
4
1 1 0 2
5 1 -3 1
2 2 -1 4
-7 -8 0 -5
#include"stdafx.h"
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
	ifstream in("input.txt");
	if(!in.is_open())
		exit(-1);
	int n;
	in>>n;	//n保存第一行的数据4
	//cout<<n<<endl;
	int a[4][4];//二维数组a保存矩阵
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			in>>a[i][j];
	/*for(int i=0;i<n;i++)//输出矩阵a中的元素		
	{	for(int j=0;j<n;j++)
			cout<<a[i][j]<<" ";
	cout<<endl;
	}*/
	int b[4][8];//二维数组b实现第一列与最后一列相邻
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			b[i][j]=a[i][j];
			b[i][j+n]=a[i][j];
		}
	/*for(int i=0;i<n*2;i++)//输出矩阵b中的元素		
	{	for(int j=0;j<n*2;j++)
			cout<<b[i][j]<<" ";
	cout<<endl;
	}*/	
	int Max=-1024;//用Max保存最大子矩阵的和
	for(int up=0;up<4;up++)//子矩阵的上边界
		for(int down=up;down<4;down++)//子矩阵的下边界
			for(int left=0;left<8;left++)//子矩阵的坐边界
				for(int right=left;right<8;right++)//子矩阵的右边界
					{
						int temp=0;//保存当前子矩阵元素和
						for(int row=up;row<=down;row++)//当前上下界
							for(int col=left;col<=right;col++)//当前左右界
								temp+=b[row][col];//遍历子矩阵每个元素并累加求和
						Max=max(Max,temp);		
					}
	//cout<<Max<<endl;				
	in.close();
	ofstream out("output");
	if(out.is_open())
		out<<Max;
	out.close();	
	system("pause");
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值