2019-9 小明种苹果
ccf csp刷题记录,方法不一定是最好的,只是多提供一种解题的思路和方法。
题目:
解题运用知识:
- 创立苹果树结构体
- new与delete的使用
- 找最大数算法
源代码:
#include<iostream>
using namespace std;
struct aptree {
int init; //苹果树初始苹果数量
int *cutnum; //new出一个空间来记录每一轮疏掉的苹果数量
char treenum; //苹果树的编号
int totalcut; //一共疏掉的苹果数量
int total; //该苹果树经过疏果后剩下的果子总量
};
int find_maxcut(aptree *ap , int num)
{
int stand = ap[0].totalcut;
int treenum = 0;
for (int i = 1;i < num;i++)
{
if (ap[i].totalcut > stand)
{
stand = ap[i].totalcut;
treenum = i;
}
}
return treenum; //返回疏果数量最多的树的编号(注意,由于数组的从零开始,这里的编号加1才是真正的编号)
}
int main()
{
int treenums;
cin >> treenums;
int turn;
cin >> turn;
int init, cutnums;
int totalcut = 0;
int totalnum = 0;
aptree *ap;
ap = new aptree[treenums];
for (int i = 0;i < treenums;i++)
{
cin >> init;
ap[i].init = init;
ap[i].cutnum = new int[turn];
for (int j = 0;j < turn;j++)
{
cin >> cutnums;
ap[i].cutnum[j] = cutnums;
totalcut += cutnums;
}
ap[i].totalcut = (-totalcut); //因为输入疏果数量都是负数,所以这里前面加个-号
ap[i].total = init + totalcut;
totalnum += ap[i].total;
totalcut = 0;
}
int finalnum;
finalnum = find_maxcut(ap, treenums);
cout << totalnum << " " << (finalnum + 1) << " " << ap[finalnum].totalcut;
//有new一定要有正确的delete,否则会造成内存泄漏
for (int i = 0;i < treenums;i++)
{
delete[]ap[i].cutnum;
}
delete[]ap;
return 0;
}
待续。。。。。