洛谷P1223 做题笔记
代码如下:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define N 10001
int dp[N],f[N];
struct AC
{
int num;
int i;
};
AC s[N];
bool cmp(AC m1, AC m2)
{
return m1.num < m2.num;
}
int main()
{
double sum=0;
int n;
scanf("%d",&n);
for (int i = 0; i < n; i++)
{
scanf("%d",&s[i].num);
s[i].i = i;
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++)
printf("%d ",s[i].i+1);
printf("\n");
for (int i = 0; i < n - 1; i++)
{
sum =sum+ (n - 1 - i) * s[i].num;
}
sum = sum / n;
printf("%.2f\n",sum);
return 0;
}
总结:
1.初解此题没想到用结构体分别储存变量,由此题让我加深了对结构体的理解。
2.学会了使用sort函数对结构体数组进行排序。
2.1.如果只是对数组进行排序,代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
int s[100];
int main()
{
for(int i=0;i<5;i++)
scanf_s("%d",&s[i]);
sort(s, s + 5);
for (int i = 0; i < 5; i++)
printf("%d ",s[i]);
}
2.2如果要对结构体数组排序,代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct AC {
int a, b;
};
bool cmp(AC m1,AC m2)
{
return m1.a < m2.a;
}
AC s[100];
int main()
{
for(int i=0;i<5;i++)
scanf_s("%d",&s[i].a);
sort(s, s + 5,cmp);
for (int i = 0; i < 5; i++)
printf("%d ",s[i].a);
}
3.对于加法的加速:
for (int i = 0; i < n - 1; i++)
{
sum =sum+ (n - 1 - i) * s[i].num;
}