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;
int a[3][2],b[3][2];
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
in>>a[i][j];
}
for(int i=0;i<3;i++)
{
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;
int a[4][4];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
in>>a[i][j];
int b[4][8];
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];
}
int Max=-1024;
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);
}
in.close();
ofstream out("output");
if(out.is_open())
out<<Max;
out.close();
system("pause");
return 0;
}