GVKun编程网logo

SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用(sumif函数二组总成绩)

6

对于想了解SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用的读者,本文将是一篇不可错过的文章,我们将详细介绍sumif函数二组总成绩,并且为您提供关于AGC039F-MinProd

对于想了解SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用的读者,本文将是一篇不可错过的文章,我们将详细介绍sumif函数二组总成绩,并且为您提供关于AGC 039F - Min Product Sum、bash – 在UNIX shell中实现`sumproduct`、DateOf、TimeOf、YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf - 提取时间成分、excel sumproduct函数的使用方法及实例的有价值信息。

本文目录一览:

SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用(sumif函数二组总成绩)

SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用(sumif函数二组总成绩)

在学校组织的学年考试考务工作中,为了便于评卷实行流水作业和避免学生作弊,经常将同一年级不同班级的学生拆散混编。在考试登分完毕之后,如何做到不改变原始表格的状态而进行分班成绩统计呢?利用SUMIF、COUNTIF和SUMPRODUCT这三个函数,一切都将会变得十分轻松。下面举例说明。

一、造册登分

登分册一般有班级、考号、姓名及语文、数学等学科名称,我们可以把这个工作表建立在Sheet1,并将其重命名为;登分册”,将学生成绩输入其中()。将Sheet2命名为;统计表”,在其中设置好班级、科目、平均分、及格人数、及格率、优生人数、优生率等统计信息列标题,输入班级和需要统计的科目内容()。

二、建立函数

在;统计表”中的C2单元格输入数组公式=SUMIF(登分册!$A$2:A$13,"一(1)",登分册!$D$2:D$13),按住Ctrl和Shift键回车可以计算出一(1)班的总分,将公式向下复制到各单元格,并将其中的;一(1)”班分别改为相应班级名称。这个数组公式的含义是:在;登分册”工作表中查找;一(1)班对应的成绩,并返回一(1)班所有成绩之和。

在;统计表”D2单元格输入公式=ROUND(C2/COUNTIF(登分册!$A$2:A$13,统计表!A2),2)计算出一(1)班的平均分,向下拖动复制公式到相应单元格。该公式的含义是:将C2中的总分除以;登分册”A列中与A2显示的值(一(1)班)相同的人数,并保留两位小数。

在E2中输入数组公式计算及格人数。该数组函数为=SUMPRODUCT((登分册!$A$2:A$13=统计表!$A2)*(登分册!$D$2:D$13=60)),其含义是:若;登分册”工作表A列中有与;统计表”A2相同的信息,即;一(1)班”,则返回与;一(1)班”相对应的成绩中大于或等于60分的人数()。将公式向下复制后,在F2单元格中输入公式=E2/COUNTIF(登分册!$A$2:A$13,统计表!$A2)计算该班的及格率。

将E两列中的公式复制到G列,并将公式是的"=60 "修改成学校规定的优生标准(如是80分为优生,则将60改为80即可)()。同理,将F列中的公式复制到H列即可得到优生率的统计结果。

需要提醒大家的是,使用数组函数,一定不要忘记是Ctrl+Shift+回车。

AGC 039F - Min Product Sum

AGC 039F - Min Product Sum

考虑枚举行列的 $n+m$ 元组,表示该行 / 列的最小值。

这样的方案数可以容斥轻松算出。

发现这样本质不同的限制有 $2(n+m)$ 种:

  • 当前行 / 列 $> t \to \ge t+1$

  • 当前行 / 列 $\ge t$

每个位置上的限制是行列上的较大值,贡献是较小值。

$f[cur][i][j]$ 表示当前考虑到加入 $\ge cur$ 的限制,目前已经确定了 $i$ 行 $j$ 列上面的值。

依次加入,计算贡献即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,K,mod;
inline int add(int a,int b){a+=b;return a>=mod?a-mod:a;}
inline int sub(int a,int b){a-=b;return a<0?a+mod:a;}
inline int mul(int a,int b){return 1ll*a*b%mod;}
inline int qpow(int a,int b){int ret=1;for(;b;b>>=1,a=mul(a,a))if(b&1)ret=mul(ret,a);return ret;}
/* math */
const int N = 110;
int bin[N][N];
int c=0,f[2][N][N],cst[N][N];
int fac[N], ifac[N], pw[N][N*N];
int main()
{
	cin >> n >> m >> K >> mod;
	for(int i=0;i<=K;i++){
		pw[i][0]=1;for(int j=1;j<=n*m;j++)pw[i][j]=mul(pw[i][j-1],i);
	}
	fac[0]=ifac[0]=1;for(int i=1;i<=max(n,m);i++)fac[i] = mul(fac[i-1],i);
	ifac[max(n,m)]=qpow(fac[max(n,m)],mod-2);for(int j=max(n,m)-1;j;j--)ifac[j]=mul(ifac[j+1],j+1);
	f[c][0][0]=1;
	for(int D = 1;D<=K;D++){
		c^=1;memset(f[c],0,sizeof(f[c]));
		for(int j=0;j<=n;j++)
		for(int k=0;k<=m;k++){
			cst[j][k] = mul(mul(ifac[j],pw[D-1][j*(m-k)]), mul(pw[K-D+1][j*k], j%2?mod-1:1));
		}
		for(int i=0;i<=n;i++)for(int j=0;j<=m;j++){
			for(int k=0;k<=i;k++){
				f[c][i][j]=add(f[c][i][j], mul(f[c^1][i-k][j], cst[k][j]));
			}
		}
		c^=1;memset(f[c],0,sizeof(f[c]));
		for(int j=0;j<=m;j++)
		for(int k=0;k<=n;k++){
			cst[j][k] = mul(mul(ifac[j],pw[D-1][j*(n-k)]), mul(pw[K-D+1][j*k], j%2?mod-1:1));
		}
		for(int i=0;i<=n;i++)for(int j=0;j<=m;j++){
			for(int k=0;k<=j;k++){
				f[c][i][j]=add(f[c][i][j], mul(f[c^1][i][j-k], cst[k][i]));
			}
		}
		c^=1;memset(f[c],0,sizeof(f[c]));
		for(int j=0;j<=n;j++)
		for(int k=0;k<=m;k++){
			cst[j][k] = mul(mul(ifac[j],pw[D][j*(m-k)]), mul(pw[K-D+1][j*k], 1));
		}
		for(int i=0;i<=n;i++)for(int j=0;j<=m;j++){
			for(int k=0;k<=i;k++){
				f[c][i][j]=add(f[c][i][j], mul(f[c^1][i-k][j], cst[k][j]));
			}
		}
		c^=1;memset(f[c],0,sizeof(f[c]));
		for(int j=0;j<=m;j++)
		for(int k=0;k<=n;k++){
			cst[j][k] = mul(mul(ifac[j],pw[D][j*(n-k)]), mul(pw[K-D+1][j*k], 1));
		}
		for(int i=0;i<=n;i++)for(int j=0;j<=m;j++){
			for(int k=0;k<=j;k++){
				f[c][i][j]=add(f[c][i][j], mul(f[c^1][i][j-k], cst[k][i]));
			}
		}
	}
	cout << mul(f[c][n][m], mul(fac[n],fac[m])) << endl;
}

bash – 在UNIX shell中实现`sumproduct`

bash – 在UNIX shell中实现`sumproduct`

我有一个来自脚本thescript的输出,内容如下:

202 1 0 1 0 0 0

现在我想用awk选择性地将这个数字加起来,具体取决于${SUM_MASK}的值:

SUM_MASK=1,1,0

我希望有类似的东西:

thescript | awk <SOMETHING>

其中thescript的每个数字输出乘以${SUM_MASK}中的相应数字,获得:

203

结果:
203 = 202 * 1 1 * 1 0 * 0 1 * 0 0 * 0 0 * 0 0 * 0

这与电子表格软件中的sumproduct功能类似.

下面的代码snipets可以解决这个问题,但我想避免使用进程替换:

SUM_MASK="1,0"; paste <(thescript) <(echo ${SUM_MASK} | tr ',' '\n') | awk '{ SUM += $1 * $2 } END { print SUM }'

和命名管道:

SUM_MASK="1,0"; mkfifo fA; mkfifo fB; thescript > fA & echo ${SUM_MASK} | tr ',' '\n' > fB & paste fA fB | awk '{ SUM += $1 * $2 } END { print SUM }' > result.text; rm -f fA fB

我怎么能实现这一目标?

解决方法

echo "202 1 0 1 0 0 0" |
awk -v summask="1,0" '
    BEGIN {split(summask,mask,/,/)}
    {   sumproduct=0
        for (i=1; i<=NF; i++) {
            sumproduct +=  $i * mask[i]
        }
        print sumproduct
    }
'
203

DateOf、TimeOf、YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf - 提取时间成分

DateOf、TimeOf、YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf - 提取时间成分

它们的参数都是一个 TDateTime,
DateOf、TimeOf 分别提取日期与时间, 并返回 TDateTime 类型;
YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf 返回的都是 Word 类型.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses DateUtils;

procedure TForm1.FormCreate(Sender: TObject);
var
  dt,d,t: TDateTime;
  Year,Month,Week,Day,Hour,Minute,Second,MilliSecond: Word;
begin
  dt := StrToDateTime(''2009-5-20 11:22:33'');

  d := DateOf(dt);
  ShowMessage(DateToStr(d)); //2009-5-20

  t := TimeOf(dt);
  ShowMessage(TimeToStr(t)); //11:22:33

  Year        := YearOf(dt);
  Month       := MonthOf(dt);
  Week        := WeekOf(dt);
  Day         := DayOf(dt);
  Hour        := HourOf(dt);
  Minute      := MinuteOf(dt);
  Second      := SecondOf(dt);
  MilliSecond := MilliSecondOf(dt);

  ShowMessageFmt(''%d,%d,%d,%d,%d,%d,%d,%d'', [Year,Month,Week,Day,Hour,Minute,
    Second,MilliSecond]); {2009,5,20,11,22,33,0}
end;

end.


DateUtils-Function

excel sumproduct函数的使用方法及实例

excel sumproduct函数的使用方法及实例

这篇文章主要介绍了excel sumproduct函数的使用方法及实例,需要的朋友可以参考下

从excel2007版本以后,新增了一个sumproduct函数,因为功能多样且强大,可以说其是excel中一颗璀璨的明星,本文就介绍下sumproduct是什么意思sumproduct函数的功能是什么sumproduct多条件求和,介绍sumproduct函数的使用方法及实例。详细的分析以后希望能够让您彻底掌握该函数。

sumproduct是什么意思

1、查过SUMPRODUCT()函数的使用方法,其解释为在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和。按我个人解释就是两个以上的数组乘积之和。

其语法格式为SUMPRODUCT(array1, [array2], [array3],…),其中每个array都表示一个数组,array个数不超过255个。

2、以下面这个表格为例应用该函数,输入公式=SUMPRODUCT(A2:A8,B2:B8)

3、结果是168,那么这个值是怎么来的呢,代表什么意思?

4、我们通过函数解释验证看看,所以将数据1和数据2两列数组分别相乘,最后相加。

5、看到结果是168,与sumproduct函数求的结果一致,也与函数解释一致。到此我们大体理解了该函数的运算原理。

6、上面的函数解释以及举例已经将函数的一个功能——乘积求和展示给了大家。

条件计数

1、sumproduct函数也可以进行计数,我们以下面这个例子演示用法。

2、我们在E2单元格输入公式=SUMPRODUCT((A2:A10="二班")*(B2:B10="数学")),表示同时满足二班和数学这两个条件的情况有几个,也就是进行条件计数。

3、结果是1,确实无误。

4、其原理是

((A2:A10="二班"),就是数组中各行的值如果是二班,就是“真”,否则,就是“假”,“真”对应值为1,“假”对应值为0,当有这个条件表达后,A2:A10的值是“0,0,0,1,1,1,0,0,0”。(B2:B10="数学"),就是数组中各行的值如果是数学,就是“真”,否则,就是“假”,“真”对应值为1,“假”对应值为0,值是“0,1,0,0,1,0,0,1,0”。 这两个经过变换后的数组乘积之和就是1。

条件求和

1、以下面实例用sumproduct函数进行条件求和。

2、在E2单元格输入公式=SUMPRODUCT((A2:A10="二班")*(B2:B10="数学")*(C2:C10)),表示满足A列是二班,B列是数学的时候,求均分,结果正确。

3、在E4单元格输入公式=SUMPRODUCT((B2:B10="数学")*(C2:C10)),表示满足B列是数学的时的均分之和。

4、验证看到三个班数学均分之和是245.。

注意事项

请大家多看下条件计数最后原理解释,看懂了基本就可以对sumproduct函数有了比较深入的理解

sumproduct函数也有其劣势,数据量非常大时运行速度较慢。

总结

以上是小编为你收集整理的excel sumproduct函数的使用方法及实例全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于SUMIF、COUNTIF、SUMPRODUCT函数在成绩统计中应用sumif函数二组总成绩的介绍到此结束,谢谢您的阅读,有关AGC 039F - Min Product Sum、bash – 在UNIX shell中实现`sumproduct`、DateOf、TimeOf、YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf - 提取时间成分、excel sumproduct函数的使用方法及实例等更多相关知识的信息可以在本站进行查询。

本文标签: