最少比赛天数为多少?

gofor 2001-12-31 10:43:34
加精
128名选手参加比赛,每名选手每天只能比赛一次。用尽可能少的天数决出所有名次(1~128名)。求算法。
...全文
565 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
huihui3000 2002-02-05
  • 打赏
  • 举报
回复
我想说.....................
mathe 2002-01-25
  • 打赏
  • 举报
回复
To intfree,
你那个同学是女孩子?那实在了不起。
好像女孩子向来是同数学无缘(或者说数学无缘于结识女孩子)。
gofor 2002-01-24
  • 打赏
  • 举报
回复
intfree(): 请你再问问她。我们很想知道具体解法。
jett 2002-01-24
  • 打赏
  • 举报
回复
噢 看错了对不起
jett 2002-01-24
  • 打赏
  • 举报
回复
答案是n*(n+1)/2不会吧?
每多一人要多n天?
那如果用一下归纳法

n人时假设已经决出了这n个人的名次
再加一个人,在n天里分别和这n个人比
这不是正好(n+1+1)(n+1)/2

这会是最优解,那个MM在唬你吧
gofor 2002-01-24
  • 打赏
  • 举报
回复
mathe的解法是对的,实际步骤类似归并排序,只不过两个已排序序列的归并方法不同。对2^n名选手,能保证在n(n+1)/2天完成任务,应该是最优解法了!
rushing 2002-01-24
  • 打赏
  • 举报
回复
如果用单淘汰:7天
如果用单循环:127天
congling 2002-01-24
  • 打赏
  • 举报
回复
看来我理解错题目了,Sorry
intfree 2002-01-24
  • 打赏
  • 举报
回复
mathe使我回忆起了那个证明,就是他那样证的。
简单的讲就是这样:
1. 命题A:|a|=|b|=2^(n-1),a, b排好序,则只需n天。
2. 加强命题A,得到命题B:|a|+|b|=2^n,a, b排好序,则只需n天。
3. 归纳法证明命题B(即命题A)。
4. 用命题A,归纳证明最后的结论。
所用到的“技巧”是:两次归纳构造和加强命题
congling 2002-01-24
  • 打赏
  • 举报
回复
1,2,3,4,5,6,7,8

1) 12 34 56 78 --1357为胜者
2) 13 57 24 68 --1526为胜者
3) 15 26 37 48 --1234为胜者
顺序应该是1,5,3,7,2,6,4,8
可以使用数学归纳法证明,2^(n)人只要n次就可以决出顺序

第一天分成,2^(n-1) vs 2^(n-1)胜利者为2^(n-1)个,失败者为2^(n-1)
其后,2^(n-1)胜者/败者决出2^(n-1)个名次化n-1天,然后把2^(n-1)胜者放在败者顺序之前,那就可以组成2^n个名次了




congling 2002-01-24
  • 打赏
  • 举报
回复
如果有2^n个人,我真的想不出有什么难的,
先分成2^(n-1)比,胜利者为2^(n-1),同时失败者也为2^(n-1),即每天产生的胜利者和失败者一样多。
因此应该是n天为最小值才对啊!为什么是n(n-1)/2实在想不通。
mathe 2002-01-24
  • 打赏
  • 举报
回复
1。
2^n个人先分成两组,花费(n-1)n/2天,各自独立排序。

2。对于两个已经排列好的队列倒序进行归并。假设第一队列有a人,第二个队列b人(a>=b,a+b为2的幂)。
将第一组的人按大到小排列,将第二组按小到大排列,将对应位置上的人进行比较大小(第一个队列前后个(a-b)/2个人不参与比较。假设第二个队列前面k个人都比a中对应的选手差,后面b-k个人比a中对应的选手好。在k<>0而且k<>b时。我们将a的前面(a-b)/2+k个人记为队列a1,后面(a-b)+2+b-k个人记为a2,同样的有b1,b2
所以a1中所有的人大于a2和b1中的。b2中所有的人大于a1和b2的。
而且count(a1)+count(b2)=(a+b)/2 = count(a2)+count(b1),所以我们只现在需要并行比较a1 和b2两个排好序的队列相互的大小以及a2和b1两个排好序的队列的相互大小,递归调用2过程就可以了。
如果k=0,表示b中的所有人都比a中后面b+(a-b)/2个人大,只需要比较b中所有人同a中前面(a-b)/2个人的大小了,这两个队列的人的总数正好也是b+(a-b)/2=(a+b)/2,还是可以递归调用2过程。
同样对于k=b时,处理的方法也类似。
也就是,每次经过一次2中的调用,我们花费了一天,两个需要比较的子队列的长度之和减少一倍。所以最多再经过n天,就没有需要比较的队列了。
所以总共花费时间(n-1)n/2+n=n(n+1)/2,正好归纳假设成立。
intfree 2002-01-23
  • 打赏
  • 举报
回复
是一道数学竞赛的题目
intfree 2002-01-23
  • 打赏
  • 举报
回复
n = 128
m = log(2, n) = 7
mindays = (m + 1) * m / 2 = 7 * 8 / 2 = 28

以前我的一个同学给我讲过这道题目,只是不记得了,
今天又碰到了她,才回忆起这个结论。

用的是“相当复杂的二分法”
intfree 2002-01-23
  • 打赏
  • 举报
回复
to mathe()

对不起了,我无法提供更详细的信息。
第一次听这道题目的解答是很多年前,当时的感觉是在云雾之中,
只记得是二分法构造,很复杂,但结论肯定是对的(这是当时的感觉)。
今天我只问到了结论,如需严格证明,可能还要一定时间才想得出(最近比较忙)。
那位同学还强调了两点:
1. 这道题目需要相当的数学技巧(当然,这是针对我来说的)。
2. 这个界相当优了(即可能不是最优,但怀疑是最优)。
附结论:
2^n个人,只需n(n+1)/2天

当我问她,是不是n个人需要n天时,被她大骂一顿,真没面子 :(
lrzhou 2002-01-23
  • 打赏
  • 举报
回复
看赛制,如世界杯决赛2天决出1,2,3,4名一样:
1天,决出前64强和后64强
2天,前64强决出前32强和33-64强,后64强决出65-96强和97-128强
...
...
...
...
7天,决出所有128强!!!!!!
mathe 2002-01-23
  • 打赏
  • 举报
回复
是不是将两个有序队列倒叙进行比较,分裂成两个集合,其中一个集合中所有元素都大于另一个元素呢?而且每一个集合都正好包含两个有序子序列?
不过这种方法的问题是各个子序列的长度会不均匀化,导致最差情况下效果没有想象中的好。
过客猫2022 2002-01-22
  • 打赏
  • 举报
回复
所以15天就可以决定了![注:当然也可14天,先6天循环赛, 后8天淘汰赛]
过客猫2022 2002-01-22
  • 打赏
  • 举报
回复
先用分组循环,再用淘汰赛,如同世界杯那样的比赛。以4人一组,共32组,进行循环比赛,每组前2名进入64强,剩下的争后64名,三天就可决定前64名及后64名。然后又是4人一组,就可得到1~32,33~64,65~96,97~128名,再过三天,就可以得到1~16,17~32,...128,这样就得取了8组每组16人。然后进行淘汰赛,取其中16人来说,假定他们分别原小组排名第一,第二,然后将原8个组,分成四组,每组由原组中前2名组成,然后每组中,原小组第一与另一原小组第二比赛,两天就可以分出1,2,3,4名,前两名进级争8强,然后4强,然后冠军,这样算下来,共需9天循环赛,6天淘汰赛,共15天比赛,可以决定这128名的排名。[出现了同名次时,且比平时,可以像世界杯那样[点球大战,加时赛,净胜球等等]]。
gofor 2002-01-22
  • 打赏
  • 举报
回复
对,是排序算法,但与普通的排序算法不同,这是并行算法,一次可以做N/2个比较。
加载更多回复(44)
一些经典的习题 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%, 高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 【程序13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: public class FullSquare { public static void main(String[] args) { int t = 0; for (int i = 1; i <= 100; i++) { t = i + 100; for (int j = 1; j <= 100; j++) { if (t == j * j) { t = t + 168; for (int p = 1; p <= 100; p++) { if (t == p * p) System.out.println(i); } } } } } } 【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 import java.util.Scanner; //题目:输入某年某月某日,判断这一天是这一年的第几天 public class ThisDayIs { public static void main(String[] args) { System.out.println("请输入年份,如:2008"); Scanner YMD = new Scanner(System.in); int year = YMD.nextInt(); System.out.println("请输入月份1~12,如8"); int month = YMD.nextInt(); System.out.println("请输入天数1~31,如8"); int day = YMD.nextInt(); if (LeapYear(year)) { switch (month) { case 1: { System.out.println("这是" + year + "的第" + day + "天"); break; } case 2: { day = day + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 3: { day = day + 29 + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 4: { day = day + 29 + 31 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 5: { day = day + 29 + 31 * 2 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 6: { day = day + 29 + 31 * 3 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 7: { day = day + 29 + 31 * 3 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 8: { day = day + 29 + 31 * 4 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 9: { day = day + 29 + 31 * 5 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 10: { day = day + 29 + 31 * 5 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 11: { day = day + 29 + 31 * 6 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 12: { day = day + 29 + 31 * 6 + 30 * 4; System.out.println("这是" + year + "的第" + day + "天"); break; } } } else switch (month) { case 1: { System.out.println("这是" + year + "的第" + day + "天"); break; } case 2: { day = day + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 3: { day = day + 28 + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 4: { day = day + 28 + 31 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 5: { day = day + 28 + 31 * 2 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 6: { day = day + 28 + 31 * 3 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 7: { day = day + 28 + 31 * 3 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 8: { day = day + 28 + 31 * 4 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 9: { day = day + 28 + 31 * 5 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 10: { day = day + 28 + 31 * 5 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 11: { day = day + 28 + 31 * 6 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 12: { day = day + 28 + 31 * 6 + 30 * 4; System.out.println("这是" + year + "的第" + day + "天"); break; } } } private static boolean LeapYear(int year) { if (year % 4 == 0 || year % 100 == 0){ System.out.print(year+"是闰年"); return true; } else return false; } } import java.util.Scanner; //题目:输入某年某月某日,判断这一天是这一年的第几天 public class ThisDayIs { public static void main(String[] args) { System.out.println("请输入年份,如:2008"); Scanner YMD = new Scanner(System.in); int year = YMD.nextInt(); System.out.println("请输入月份1~12,如8"); int month = YMD.nextInt(); System.out.println("请输入天数1~31,如8"); int day = YMD.nextInt(); int[] temp = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (LeapYear(year)) { temp[2] = temp[2] + 1; for (int i = 0; i < month; i++) { day += temp[i]; } System.out.println("这是" + year + "的第" + day + "天"); } else { for (int i = 0; i y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 import java.util.Scanner; //题目:输入三个整数x,y,z,请把这三个数由小到大输出。 public class CompareThreeNumber { public static void main(String[] args) { System.out.println("请输入三个数"); Scanner Three = new Scanner(System.in); int xThree = Three.nextInt(); int yThree = Three.nextInt(); int zThree = Three.nextInt(); int temp; if (xThree >= yThree) { temp = xThree; xThree = yThree; yThree = temp; if (yThree >= zThree) { temp = yThree; yThree = zThree; zThree = temp; if (xThree >= yThree) temp = xThree; xThree = yThree; yThree = temp; } } else if (yThree >= zThree) { temp = yThree; yThree = zThree; zThree = temp; if (xThree >= yThree) { temp = xThree; xThree = yThree; yThree = temp; } } System.out.println(xThree + "<" + yThree + "<" + zThree); } } 【程序16】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 //题目:输出9*9口诀。 public class Formula99 { public static void main(String[] args) { for (int row = 1; row <= 9; row++) { for (int line = 1; line = 1;day--){ sum = (sum + 1) *2; System.out.println("第"+(day)+"天一共有"+sum+"个桃子"); } } } 【程序18】 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序19】 题目:打印出如下图案(菱形) * *** ****** ******** ****** *** * 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。 【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 1.程序分析:请抓住分子与分母的变化规律。 //题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 public class FractionSum { public FractionSum() { double sum = 0; for (double i = 2; i <= 20; i++) sum += F(i) / F(i - 1); System.out.println("这20项的结果是:" + sum); } public double F(double j) { if (j == 1) return 1; else if (j == 2) return 2; else return F(j - 1) + F(j - 2); } public static void main(String[] args) { new FractionSum(); } } 【程序21】 题目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。 //题目:求1+2!+3!+...+20!的和 public class Factorial { public Factorial() { int sum = 0; for (int i = 1; i <= 20; i++) { int temp = 1; for (int j = 1; j <= i; j++) { temp *= j; } sum += temp; } System.out.println("前20个数的阶乘和为" + sum); } public static void main(String[] args) { new Factorial(); } } //题目:求1+2!+3!+...+20!的和 public class Factorial { public Factorial() { int sum = 0; for (int i = 1; i <= 4; i++) { sum += F(i); } System.out.println("前20个数的阶乘和为" + sum); } public int F(int n) { if (n == 1) return 1; else return n * F(n - 1); } public static void main(String[] args) { new Factorial(); } } 【程序22】 题目:利用递归方法求5!。 1.程序分析:递归公式:fn=fn_1*4! public class Recursion { public Recursion(int number) { System.out.println(number+"的阶乘是:"+F(number)); } public int F(int n) { if (n == 1) return 1; else return n * F(n - 1); } public static void main(String[] args){ new Recursion(5); } } 【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 【程序27】 题目:求100之内的素数 【程序28】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。 【程序29】 题目:求一个3*3矩阵对角线元素之和 1.程序分析:利用双重for循环控制输入二维数组,再将a[ i ][ i ]累加后输出。 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。 【程序31】 题目:将一个数组逆序输出。 1.程序分析:用第一个与最后一个交换。 import java.util.Scanner; //题目:将一个数组逆序输出。 public class ArrayReverse { public ArrayReverse() { System.out.println("输入一个数指明数组长度"); Scanner number = new Scanner(System.in); int n = number.nextInt(); System.out.println("输入一个数组"); int[] Array = new int[n]; Reverse(Array); } public void Reverse(int[] Array) { Scanner array = new Scanner(System.in); for (int i = 0; i = 0; i++, j--) { int x, y; x = Array[i]; y = Array[j]; Array[j] = x; Array[i] = y; if (i >= j) break; } for (int i = 0; i < Array.length; i++) System.out.print(Array[i] + " "); } public static void main(String[] args) { new ArrayReverse(); } } 【程序32】 题目:取一个整数a从右端开始的4~7位。 程序分析:可以这样考虑: (1)先使a右移4位。 (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4) (3)将上面二者进行&运算。 【程序33】 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 【程序34】 题目:输入3个数a,b,c,按大小顺序输出。 1.程序分析:利用指针方法。 【程序35】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位。 【程序38】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 【程序39】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时, 调用函数1/1+1/3+...+1/n(利用指针函数) 【程序40】 题目:字符串排序。 【程序41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 【程序42】 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 【程序43】 题目:求0—7所能组成的奇数个数。 【程序44】 题目:一个偶数总能表示为两个素数之和。 【程序45】 题目:判断一个素数能被几个9整除 【程序46】 题目:两个字符串连接程序 【程序47】 题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 【程序48】 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 【程序49】 题目:计算字符串中子串出现的次数 【程序50】 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
本书侧重于函数的实战应用,共分12章,前10章分别介绍了数学函数、统计函数、日期和时间函数、文本函数、逻辑函数、查找和引用函数、财务函数、信息函数以及数据库和三角函数在实战中的应用;第11 章介绍了函数与Excel其他功能的结合使用,另外第12章单独介绍了Excel 2013的特有函数。 读者可以在本书中查询相关案例,从而在工作中得到解决问题的方法; 也可以将本书作为学习Excel 函数的参考书或习题集,以通过对本书中案例的演练来掌握常用的函数。 本书主要适用于希望快速掌握Excel函数相关知识,并使用公式和函数解决办公中实际问题的用户,适用于不同年龄段的办公人员、文秘、财务人员、公务员,尤其对刚进入职场的工作人员,在解决实际问题上有很大的指导作用。 Chapter 01 公式与函数必会知识和操作 1 ◎认识公式、函数及运算符 2 001 认识公式与函数的作用与联系 2 002 运算符的类型及其用途 2 003 计算中的运算顺序 4 ◎灵活处理数据计算中的各种引用 5 004 利用快捷键调整单元格的引用方式 5 005 处理跨表引用 6 006 处理跨工作簿引用 8 ◎数据计算中的互换准则与数据区分 9 007 用数值指代逻辑值的规则 9 008 用数学运算替代逻辑函数 11 009 区分空单元格与空文本 13 010 让空白单元格不显示为0 13 ◎函数屏幕提示的妙用 15 011 提示函数的语法结构 15 012 查看函数参数的意义 17 013 快速选定指定参数 17 014 快速获取函数的帮助信息 19 ◎处理数据计算的方法 20 015 计算公式结果的几种方法 20 016 使用【F9】键查看公式结果 21 017 批量复制公式——按【Ctrl+Enter】组合键 21 018 批量复制公式——按【Ctrl+D】组合键 23 019 批量复制公式——拖动控制柄 24 020 批量复制公式——双击控制柄 25 021 批量复制公式——使用粘贴选项功能 26 Chapter 02 数学函数应用实例 29 ◎求和函数 30 001 计算所有生产线的总产量 30 002 计算签单总额在300000元以上的总金额 32 003 计算销售部当月的实发工资总和 34 004 计算销售量排前三的商品总销量 36 005 高斯求和 38 006 汇总女装订单表中已收到的定金总额 39 007 汇总跳远成绩在1.9米以上的学生人数 41 008 计算工资在8000元以上的员工工资总和 44 009 计算提成在1500~2000元的员工工资总和 45 010 统计会员在项链上的总消费 48 011 统计会员在项链和手镯上的总消费 49 012 汇总选中单元格所在行100元以上补贴总额 51 013 计算前三名和后三名的数据之和 53 014 汇总鼠标所在列中大于7500的生产量 54 015 计算售价10元以下、销量200以上的商品总利润 56 016 统计销量300以上的竹盐系列产品总利润 57 017 计算满足一定条件的一、二级教师工作量之差 58 018 汇总销售部和市场部迟到的人数 60 019 计算低值易耗品采购总金额 61 020 计算男性员工人数 63 021 统计购买铂金戒指的男性会员人数 64 022 汇总男性会员在首饰上的总消费 66 023 汇总教学能力85分以上的一级教师总工作量 67 024 汇总所有车间员工的实际开支费用 69 ◎随机数函数 70 025 随机生成抽检产品的序号 70 026 制作随机顺序的面试次序表 73 027 将三个部门的员工随机分组 77 028 随机抽取5名员工的编号 81 029 随机抽取一名员工工资数据 84 ◎取舍函数 87 030 将跳远平均成绩保留两位小数 87 031 以“万元”为单位计算当月的产品销售总利润 89 032 汇总数量计量单位不同的金额 90 033 将员工实发工资保留“角”,忽略“分” 91 034 计算顺利完成业务需要的人数 93 035 计算发放工资所需各种面额钞票的数量 94 036 给通讯录中的数据编号 96 037 计算员工年限工资 98 038 计算可以组建的业务小组的个数 101 039 计算员工的提成工资 103 040 制作商品简易标签 104 ◎求积函数 106 041 计算车间每小时生产产值 106 042 跨表计算总产值 108 043 根据三边求普通三角形的面积 109 044 计算超市打折活动的总营业额 110 045 制作中文九九乘法表 111 046 求不同单价下的利润 113 047 计算C产品的最大入库量 115 048 计算产品的累计入库数 116 ◎商与余数函数 117 049 根据出生年月推算员工生肖 117 050 根据出生年月判断性别 119 051 生成循环序列 120 052 为员工档案奇偶行设置不同的格式 121 053 制作工资条 123 054 按梯度计算员工提成工资 125 ◎排列组合函数 127 055 预计象棋比赛的总场次 127 056 计算两种彩票的中头奖概率 128 057 计算中奖率 129 ◎分类汇总函数 130 058 求所有商品的平均销量 130 059 计算隐藏某些商品时的平均利润 132 Chapter 03 统计函数应用实例 134 ◎计数函数 135 060 统计2月26日加班人次 135 061 统计女装订单数大于500的商品数量 136 062 统计月销售量1000以下、利润2000元以上商品数 138 063 统计特色商品数量 139 064 统计各部门职工的学历情况 140 065 统计销售部总人数 142 066 自动生成员工编号 143 067 统计学生缺考总次数 144 068 统计有效的调查问卷数目 145 069 统计购买各种首饰的会员人数 146 070 计算20~35岁的员工比例 148 071 统计与公司两项业务都有往来的客户数 150 072 统计语、数、外大于90分且总分大于480分的人数 151 073 统计业绩200000元以上的大专或本科学历男性业务员 152 074 统计各级业务员业绩异常的人数 154 ◎平均值函数 156 075 计算各季度的平均生产成本 156 076 计算90分以上的平均成绩 157 077 计算学生含缺考科目的平均成绩 158 078 统计销量前N名的平均销量 160 079 计算操作员的平均产量 161 080 计算4月份交货产品的平均订单金额 162 081 计算会员在金饰上的平均消费 163 082 计算金融系讲师平均授课课时 164 083 计算满足特定条件的教师的科研能力平均分 165 084 去除最值求全班跳远平均成绩 167 085 去掉一个最高分和最低分求参赛选手平均得分 169 ◎最值函数 171 086 突出显示销量最高的数据 171 087 求月销售量低于平均销量的最大销量的商品名称 173 088 分别求1~4月排前3的销售量 175 089 制作产品一季度销量排行榜 176 090 求最后购买某种首饰的会员 178 091 计算工龄最小的女员工的工龄 179 092 计算材料的3个最少消耗量 180 093 提取每月销量倒数第二的商品 182 ◎中值函数 183 094 计算3月份产品销量中值 183 095 设定社保缴费基数上下限 185 096 查找销售量处于中间位置的部门 186 ◎排名函数 188 097 对员工上半年销售业绩进行排名 188 098 查询指定学生的成绩排名 190 099 求同龄异性员工的人数 194 ◎频率分布函数 196 100 求跳远测试中出现次数最多的成绩 196 101 查询材料采购最频繁的车间 198 102 统计各个利润区间的商品数目 200 103 分别统计未完成任务和超额完成任务的人数 202 104 分别统计本科以下及本科以上学历的员工人数 204 105 统计各学历员工数 205 106 求员工销售业绩的中国式排名 207 ◎概率分布函数 210 107 优选机器维修人员招聘方案 210 108 提供可供选择的机床维修人员配置方案 212 Chapter 04 日期和时间函数应用实例 217 ◎日期函数 218 109 计算员工工龄 218 110 计算2010年之前空调的平均售价 221 111 计算本月交货的产品数量 222 112 计算工程的起止年月 224 113 计算员工的转正时间 228 114 计算产品的交货时间处于哪一旬 230 115 制作2012年法定假日倒计时 232 116 判断借款是否逾期 234 117 将简易输入的日期转换为标准日期 236 118 计算付款日期 238 119 计算当月天数 240 120 显示本次打开档案的时间 241 121 判断机器是否需要检修 243 122 自动生成离职员工工资结算日期 245 123 计算支付货款日期 247 124 计算员工离职之前在公司工作的月数 250 125 根据入职日期计算员工带薪年假的天数 251 ◎工作日函数 253 126 计算员工的工龄(精确到月份) 253 127 计算工作的完成时间 255 128 计算本月的工作日数目 257 ◎星期函数 258 129 计算法定假日的星期 258 130 计算付款时间 262 131 计算某员工每日的工资 264 132 按周汇总产品出入库数量 266 133 自动生成考勤周报表的标题 268 134 罗列第45周的日期 270 ◎时间函数 272 135 计算临时加班的员工的工资 272 136 计算员工今日的计时工资 274 137 计算员工的平均速度 277 138 根据完成任务时间计算奖惩金额 280 139 根据通信时间计算本月总话费 282 140 在时间日期数据中提取时间或日期 285 Chapter 05 文本函数应用实例 287 ◎字符串转换函数 288 141 换行显示库存量及是否需要进货 288 142 将文本数字转换为数值并计算利润 290 143 从身份证号码中提取员工的性别信息 292 144 从身份证号码中提取员工的生日信息 294 145 快速恢复以科学计数法显示的商品条形码 296 146 将数字金额转换为人民币大写 298 147 将日期转换为中文大写 301 148 将员工提成工资转换为会计格式 302 149 根据工作年限计算员工年终奖 304 150 快速将数字转换为电话号码格式 306 151 将成本保留两位小数后再求和 308 152 将应收款显示为“万元”并添加¥符号 309 153 将全角字符转换为半角字符 310 154 计算混合字符串之中字母的个数 312 155 将半角字符转换为全角字符 313 156 计算混合字符串之中汉字的个数 314 157 将单词的首字母转换为大写 315 158 将所有单词转换为小写形式 317 159 将英文句子的首字母转换为大写其余小写的形式 318 160 将所有单词转换为大写 320 161 统计软件名称中英文字母的个数 321 162 将区域中的文本串联 323 163 为公式添加说明 324 164 用简易图表表示销量情况 326 ◎文本合并比较函数 327 165 在数值结果左侧添加“¥”符号 327 166 在身份证号码中提取员工的出生年月信息 329 167 提取月利润最高的前三种产品的名称 330 168 判断实习员工是否可以继续考察 331 ◎查找与替换函数 334 169 根据产品规格计算产品的体积 334 170 通讯录单列转3列 336 171 将15位身份证号码升级为18位 338 172 升级产品型号 340 173 将专业/年级/班级/名称分开 341 174 从软件名称中提取软件的版本号 343 175 统计各部门的员工人数 345 176 提取姓名和省名 347 ◎获取字符串函数 348 177 从地址中提取省名 348 178 通过身份证号码计算年龄 350 179 将金额分散填充 351 180 从开支明细中提取金额 354 181 从卡机数据中判断员工所属分公司及部门 355 182 从卡机数据中提取时间并判断是否迟到 357 183 根据身份证号码统计男性员工人数 358 184 在不规范格式的日期数据中提取日期 360 ◎除去空格 362 185 将英文句子规范化 362 186 分别提取省/市/县名称 363 Chapter 06 逻辑函数应用实例 365 ◎真假值判断函数 366 187 判断员工性别信息是否正确 366 188 判断员工是否全勤 367 189 判断员工是否可以直接晋升 369 190 判断员工身份证号码位数是否正确 370 191 根据年龄判断员工是否退休 371 192 判断员工是否符合晋升条件 373 193 判断员工是否升职 375 194 统计月利润中文本型数字的个数 376 195 判断商品的盈利情况是否良好 377 196 根据员工工资计算员工的个人所得税 379 ◎条件判断函数 381 197 根据员工的各项考核成绩判断员工是否合格 381 198 判断员工是否需要补考 382 199 判断员工是否缺考 383 200 查询员工是否享受夜班补贴 385 201 计算员工12月工资 387 202 汇总商品的销售额 388 203 为办公物资采购表建立归类标签 391 204 在有学生全部缺考的情况下计算学生的平均成绩 392 Chapter 07 查找和引用函数应用实例 394 ◎查找函数 395 205 查询指定员工缺勤次数 395 206 根据考核成绩评定员工考核等级 396 207 根据员工姓名查找员工编号 398 208 查询指定厂家提供的某种产品的价格 400 209 查询商品最新单价 401 210 根据员工编号或者姓名查找提成工资 403 211 根据员工姓名和编号查找员工信息 406 212 根据职务和工龄计算年限工资 408 213 根据产品名称的拼音生成产品编号 410 214 根据本月收入查询应采用税率和速算扣除数 413 215 查找某销售员某月的销售业绩 415 216 制作员工工牌 416 217 查询最后入职的员工 418 218 查询某员工是否为本公司人员 419 219 计算员工的工作项数 421 220 制作周营业额排行榜 423 221 根据员工考核成绩进行排名 427 222 罗列各省参展名单 429 223 罗列本周多次迟到的员工 432 224 根据库存编号查询库存信息 433 225 查询员工应得福利费 437 226 计算员工测评总分 439 227 查询六月值夜班最多的员工 441 228 罗列每个名次上的员工姓名 442 229 根据达标率计算不同工种员工的奖金 445 230 根据关键字查找所有符合的商品 447 231 根据员工档案详表制作简表 452 232 提取格式混乱的日期中的月份 454 233 计算业务员的业绩奖金 456 234 评定面试结果 460 ◎引用函数 461 235 为员工档案填充序号 461 236 求员工第几次的测试成绩最好 463 237 将中文日期转换为标准格式日期 465 238 每10种商品汇总一次利润 467 239 为上半年生产统计表中填充周次 470 240 统计员工的缺勤情况 471 241 拆分合并单元格 473 242 统计某公司某周的工作事项 476 243 多区域统计业绩50万元以上的销售员人数 477 244 求3个车间的最高平均产量 479 245 返回指定时间段的销售额 480 246 求最大签单业绩所在单元格 482 247 求指定车间的最大产量 483 248 汇总签单业绩 484 249 按品种编号 486 250 根据单价表和销量表汇总销售额 488 251 计算最近N天的销售额 490 252 自动生成工资条 491 253 查询员工福利相关信息 493 254 计算最低购入价格 495 255 查询员工档案中的最后一个记录 496 256 提取不重复的姓名 499 257 交换表格行列 500 ◎超链接函数 501 258 快速返回工作表首行 501 259 快速跳转至添加员工信息处 503 260 在工作表中直接使用百度搜索 505 Chapter 08 财务函数应用实例 507 ◎投资预算函数 508 261 整存整取 508 262 零存整取 509 263 计算各项投资的金额 510 264 年金现值的计算 511 265 不同计息期现值的计算 513 266 设备更新投资分析 515 267 选用甲设备的最低使用年限 518 268 求银行存款年利率 519 ◎本金和利息函数 520 269 偿债基金的计算 520 270 固定期限的银行贷款分析 522 271 求等额分期付款每期的本、息及本息和 524 272 求等额本金付款每期的本、息及本息和 526 273 选择最佳还贷方案 529 ◎折旧函数 533 274 使用直线折旧法计算固定资产折旧 533 275 使用固定余额递减法计算资产折旧 537 276 使用双倍余额递减法计算资产折旧 540 277 使用年数总和法计算资产折旧 544 278 使用可变余额递减法计算资产折旧 547 Chapter 09 信息函数应用实例 550 ◎IS()类函数 551 279 查询指定员工最大缺勤次数 551 280 转换面试结果表达方式 553 281 标记考核成绩达到A级的员工 557 282 按编号汇总库存量 559 283 统计男性员工人数 560 284 统计一季度出入库总量 562 285 求员工服务态度平均分 564 286 统计字符串中不重复的字母个数 566 287 罗列参与两个项目和一个项目的员工 568 288 统计生产人员人数 571 ◎信息类函数 574 289 显示当前工作表路径 574 290 计算员工累计积分 576 291 从明细表中提取数据 577 292 从未知格式日期中提取月份 581 Chapter 10 数据库和三角函数应用实例 584 ◎数据库函数 585 293 统计各车间平均生产成本 585 294 统计竹盐产品平均售价 587 295 统计一、二车间第二季度生产总成本 589 296 求满足条件的商品的总利润 591 297 求2班的最高平均分 593 298 求平均工龄以下员工的最高工资 595 299 判断可否选派二级教师 599 300 查询符合条件的员工姓名 601 301 统计所有考核均合格的员工数 602 ◎三角函数 605 302 计算定制锅炉的直径 605 303 计算扇形材料的弧长 606 304 绘制简单三角函数图像 608 305 绘制复杂三角函数图像 610 306 判断三角形材料是否满足条件 612 Chapter 11 函数与其他Excel功能结合应用 614 ◎条件格式中函数的应用 615 307 使工作表能自动隐藏错误值 615 308 标记销量最大的10种商品名称 616 309 标示第一季度销售额均在2000元以上的员工 619 310 在高于平均成绩的姓名后添加标识 621 311 3天内行程提示 624 312 根据关键字标识商品信息 626 313 多条件控制工资的显示 627 314 按模糊条件标示符合条件的记录 632 ◎数据有效性中函数的应用 633 315 禁止输入重复的员工编号 633 316 多条件限制员工编号输入 636 317 利用数据有效性生成二级列表 639 318 四级下拉列表的制作 644 319 将已输入的数据作为数据源 650 ◎图表中函数的应用 653 320 制作一季度产品的动态销量图 653 321 制作区域销量的动态子母图 656 322 制作销量的动态分类统计图 661 323 制作最近一周的销量图 663 324 制作收支瀑布图 666 325 制作可比较任意产品产量的柱形图 669 326 制作细分柱形图 673 327 制作双色柱形图 675 328 制作动态复合饼图 678 329 突出显示图表中的极值 683 330 高亮显示光标选定数据 685 ◎数据透视表中函数的应用 688 331 获取数据透视表关键字 688 332 计算分类百分比 689 333 为排名进行星级评定 690 ◎模拟分析中函数的应用 692 334 求可变利率下每月的还贷额 692 335 求不同利率和还款期限下的月还款额 694 336 贷款方案分析 696 337 应聘员工工资要求分析 699 ◎规划求解中函数的应用 701 338 确定产品的最佳运输方案 701 339 确定最佳生产方案 704 ◎迭代计算中函数的应用 708 340 自动记录填写产品入库记录的时间 708 341 罗列铝材下料方案 711 Chapter 12 Excel 2013特有函数介绍及其应用实例 715 001 返回数字的反余切值 716 002 返回数字的反双曲余切值 716 003 返回角度的正割值 717 004 返回角度的双曲正割值 717 005 返回角度的余切值 717 006 返回双曲角度的双曲余切值 718 007 返回角度的余割值 718 008 返回角度的双曲余割值 719 009 将罗马数字转换为阿拉伯数字 719 010 将数字转换为具备给定基数的文本表示 720 011 将数字的文本表现形式转换为十进制数 720 012 向上舍入数字到指定基数的倍数 721 013 向下舍入数字到指定基数的倍数 722 014 向上舍入数字到指定有效位的倍数 722 015 返回给定数目的项的组合数 723 016 返回指定维度的单位矩阵 723 017 使用二项式分布返回试验结果的概率 724 018 返回伽玛函数值 724 019 返回比指定标准正态累积分布函数值小0.5的值 725 020 返回对象总数中给定数据的排列数 725 021 返回标准正态分布的密度函数值 726 022 返回数据集分布的不对称度 726 023 返回两个日期之间的天数 727 024 返回给定日期在全年中所处的周数 727 025 将数字转化为文本格式并添加$符号 728 026 以与区域设置无关的方式将文本转换为数字 728 027 将给定数值转化为对应的Unicode字符 729 028 返回给定文本第一个字符对应的Unicode数字 729 029 判断公式结果是否为错误值#N/A 730 030 返回所有参数的逻辑异或 730 031 以字符串的形式返回公式 731 032 返回投资到达指定值所需的期数 731 033 返回投资增长的等效利率 732 034 检查单元格引用是否包含公式 732 035 返回引用工作表的工作表编号【SHEET()】 733 036 返回引用中的工作表总数 733 037 返回两个数的按位“与”结果 733 038 返回两个数的按位“或”结果 734 039 返回两个数值的按位“异或”结果 734 040 返回向左移动指定位数后的数值 735 041 返回向右移动指定位数后的数值 735 042 返回复数的余切值 736 043 返回复数的余割值 736 044 返回复数的正割值 736 045 返回复数的正切值 737 046 返回复数的双曲正弦值 737 047 返回复数的双曲余弦值 737 048 返回复数的双曲正割值 738 049 返回复数的双曲余割值 738 050 返回复数的平方根 738 051 返回URL编码的字符串 739 052 返回XML内容中的特定数据 739 053 返回网络上的Web服务数据 740 案例.001 计算任务的持续时间 740 案例.002 计算法定节日是全年的第几周 742 案例.003 处理员工姓名查找不到的情况 743 附录A 函数语法格式速查 745 1.逻辑函数 745 2.统计函数 745 3.数学和三角函数 750 4.日期和时间函数 752 5.文本函数 752 6.财务函数 754 7.查找和引用函数 757 8.信息函数 758 9.数据库函数 759

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧