2017 09 03 小结

来源:互联网 发布:xlsx 导入 java 编辑:程序博客网 时间:2024/05/21 23:33

今天对模拟类题目进行了分析与消化,对于题目,还是不能够很好的用函数思维去理解,但是,能够用基础的思想去解题,比如很多很多的数组。至于如何解题及思路,也就不说了,因为我写了篇题解。

如下

P1201贪婪的送礼者:

#include<bits/stdc++.h>//蒟蒻的代码,希望各位别太苛刻了! 
using namespace std;//主要是没学多久,然后被大佬的函数看懵逼,

然而在大佬的函数下我不屈服,不用函数写出了这个 
int main()
{
int NP,n[20]={},y[20],z[20];//n表示人所送出的钱,y是人拥有的要发的钱

,z是送礼者送出的礼品次数 ; 
string a[20],x[20],b[20][20];//a表示人名,

x表示送礼者(和a独立,比如a[1]可能是第二个送礼者即x[2])

b表示受礼者; 
cin>>NP;//输入人数 
for(int i=1;i<=NP;i++)
cin>>a[i];// 输入人名 
for(int i=1;i<=NP;i++)
{
cin>>x[i]/*输入送礼者*/>>y[i]/*输入发钱总数*/>>z[i];//输入发出的次数 
for(int j=1;j<=z[i];j++)
{
cin>>b[i][j];//输入受礼者; 
}
}
//输入完成; 

for(int i=1;i<=NP;i++)
{
if(z[i]!=0)//这要排除z[i]等于0的情况,因为被除数是0会炸掉 
{
for(int h=1;h<=z[i];h++)//在受礼者中与人名进行对比查找 
{
for(int ii=1;ii<=NP;ii++)
{
if(b[i][h]==a[ii])//查找到后将对应的人名的花费加上收到的钱 
{
n[ii]=n[ii]+y[i]/z[i];
break;//防止程序炸了 
}
}
}
//对受礼者进行操作 

for(int j=1;j<=NP;j++)//在被送礼者中与人名进行对比查找 
{
if(x[i]==a[j])//查找到后将对应的人名的花费减去送出的钱
{
n[j]=n[j]-y[i]/z[i]*z[i];
break;
}
}
//对送礼者进行操作 
}
}
//操作完成 
for(int i=1;i<=NP;i++)//输出不用说什么 
cout<<a[i]<<' '<<n[i]<<endl;
return 0;
}

原创粉丝点击