十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)
創(chuàng)新互聯(lián)建站專(zhuān)注于鄆城企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站制作。鄆城網(wǎng)站建設(shè)公司,為鄆城等地區(qū)提供建站服務(wù)。全流程按需定制開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
一、 任務(wù)
參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)項(xiàng)目,項(xiàng)目編號(hào)為1……m。項(xiàng)目取前五名積分;積分分別為:7、5、3、2、1;(m=20,n=20)
功能要求:
1).可以輸入各個(gè)項(xiàng)目的前五名的學(xué)校編號(hào);
2).能統(tǒng)計(jì)各學(xué)??偡郑?/p>
3).可以按學(xué)校編號(hào)輸出、學(xué)??偡峙判蜉敵?,輸出內(nèi)容包括學(xué)校編號(hào),總分和名次。
規(guī)定:輸入數(shù)據(jù)形式和范圍:20以?xún)?nèi)的整數(shù)(如果做得更好可以輸入學(xué)校的名稱(chēng),運(yùn)動(dòng)項(xiàng)目的名稱(chēng));各學(xué)校分?jǐn)?shù)為整形。
界面要求:有合理的提示,根據(jù)提示,可以完成相關(guān)的功能要求。
二、 存儲(chǔ)分析
由于學(xué)校個(gè)數(shù)、項(xiàng)目個(gè)數(shù)是確定的,并不會(huì)隨時(shí)需要增加或減少,所以采用順序存儲(chǔ)結(jié)構(gòu)較好,并且能隨機(jī)存取。即采用數(shù)組作為存儲(chǔ)結(jié)構(gòu)。
學(xué)校個(gè)數(shù)為數(shù)組長(zhǎng)度,每個(gè)數(shù)組元素必須包含如下信息:學(xué)校編號(hào),項(xiàng)目1成績(jī),項(xiàng)目2成績(jī),……,項(xiàng)目m成績(jī),總分,名次。(方便完成功能1,2,4和3部分)
由于功能3要求能按學(xué)??偡峙判蜉敵?,宜另外按總分順序存儲(chǔ)學(xué)校的總分信息。
綜合前面分析,需要兩個(gè)數(shù)組,數(shù)組1按學(xué)校編號(hào)順序存放學(xué)校編號(hào),項(xiàng)目1成績(jī),項(xiàng)目2成績(jī),……,項(xiàng)目m成績(jī),總分,名次。數(shù)組2按學(xué)??偡执娣艑W(xué)校編號(hào),總分,名次。
三、 程序結(jié)構(gòu)安排
1、 輸入各個(gè)項(xiàng)目的前五名的學(xué)校編號(hào),填寫(xiě)數(shù)組1;
2、 計(jì)算數(shù)組1的學(xué)??偡?;
3、 對(duì)數(shù)組1按總分排序,結(jié)果存放在數(shù)組2。填寫(xiě)數(shù)組2的名次。
4、 將數(shù)組2的名次信息填回?cái)?shù)組1。
四、 輸出
1、 按學(xué)校編號(hào)輸出:即輸出數(shù)組1相關(guān)信息;
2、 按學(xué)??偡峙判颍杭摧敵鰯?shù)組2相關(guān)信息;
3、 按學(xué)校編號(hào)查詢(xún)學(xué)校各個(gè)項(xiàng)目的情況:即輸出數(shù)組1相應(yīng)學(xué)校信息。
五、 舉例
有10個(gè)學(xué)校,5個(gè)項(xiàng)目。
數(shù)組1:
數(shù)組下標(biāo) 學(xué)校編號(hào) 項(xiàng)目1 項(xiàng)目2 項(xiàng)目3 項(xiàng)目4 項(xiàng)目5 總分 名次
0 1 7 3 2 12 3
1 2 1 7 2 10 4
2 3 5 3 8 6
3 4 5 1 7 3 16 1
4 5 1 1 7
5 6 2 7 9 5
6 7 5 2 5 1 13 2
7 8 3 2 5 10 4
8 9 1 1 7
9 10 3 7 10 4
數(shù)組2:
數(shù)組下標(biāo) 學(xué)校編號(hào) 總分 名次
0 4 16 1
1 7 13 2
2 1 12 3
3 2 10 4
4 8 10 4
5 10 10 4
6 6 9 5
7 3 8 6
8 5 1 7
9 9 1 7
我忘記發(fā)了
作者:recluse 發(fā)表時(shí)間:2008-10-10 16:01:00
第2樓
哈夫曼樹(shù)的建立
一、功能
輸入組成二叉樹(shù)的各個(gè)葉子值和權(quán)值,建立最優(yōu)二叉樹(shù),并輸出最優(yōu)二叉樹(shù)的數(shù)組存儲(chǔ)形式。
二、什么是最優(yōu)二叉數(shù)
n個(gè)帶權(quán)葉子組成的所有二叉數(shù)中,帶權(quán)路徑長(zhǎng)度最小的二叉樹(shù)。(帶權(quán)路徑長(zhǎng)度=所有葉子結(jié)點(diǎn)權(quán)值乘以其到根結(jié)點(diǎn)路徑長(zhǎng)度之和)
三、建立最優(yōu)二叉數(shù)
簡(jiǎn)述:每次選擇權(quán)值最小的兩個(gè)葉子合并成一個(gè)新的葉子結(jié)點(diǎn),新葉子結(jié)點(diǎn)權(quán)值為這兩個(gè)葉子結(jié)點(diǎn)權(quán)值之和。
四、程序分析
由于葉子結(jié)點(diǎn)個(gè)數(shù)n已知,根據(jù)二叉樹(shù)性質(zhì)得知,整棵二叉樹(shù)結(jié)點(diǎn)總數(shù)為(2n-1)個(gè),故可建立長(zhǎng)度為(2n-1)的數(shù)組。
數(shù)組每個(gè)元素為二叉樹(shù)的一個(gè)結(jié)點(diǎn),由5個(gè)域組成,所以應(yīng)采用結(jié)構(gòu)體類(lèi)型,包括結(jié)點(diǎn)值,權(quán)值,左孩子,右孩子,雙親。
Struct tree1
{char lerves;
int weight;
int rch;
int lch;
int parent;
}tree[9];
五、例子及程序流程
1、 輸入葉子個(gè)數(shù)及初始化。
如葉子結(jié)點(diǎn)個(gè)數(shù)為5,數(shù)組長(zhǎng)度就為9。
2、 輸入各個(gè)葉子的值、權(quán)值,并對(duì)數(shù)組初步賦值。
如各個(gè)葉子值分別為A、B、C、D、E,各個(gè)權(quán)值分別為18,12,10,7,11。此部分信息由鍵盤(pán)一邊輸入,一邊對(duì)數(shù)組初步賦值,結(jié)果如下:
數(shù)組下標(biāo) 葉子值 權(quán)值 左孩子 右孩子 雙親
0 A 18 0 0 0
1 B 12 0 0 0
2 C 10 0 0 0
3 D 7 0 0 0
4 E 11 0 0 0
5
6
7
8
3、 計(jì)算二叉樹(shù)其余結(jié)點(diǎn)信息。
由于5個(gè)葉子結(jié)點(diǎn),要合并4次。每次從還無(wú)雙親(無(wú)雙親代表還未合并過(guò))的葉子結(jié)點(diǎn)中選擇權(quán)值最小的兩個(gè)葉子結(jié)點(diǎn)進(jìn)行合并,新結(jié)點(diǎn)下標(biāo)為這兩個(gè)葉子的雙親,新結(jié)點(diǎn)的權(quán)值為這兩個(gè)葉子權(quán)值之和,左孩子為最小結(jié)點(diǎn)下標(biāo),右孩子為次小結(jié)點(diǎn)下標(biāo),葉子值不需要,雙親為0。
如下為合并一次后的結(jié)果,如此循環(huán)4次即可:
數(shù)組下標(biāo) 葉子值 權(quán)值 左孩子 右孩子 雙親
0 A 18 0 0 0
1 B 12 0 0 0
2 C 10 0 0 5
3 D 7 0 0 5
4 E 11 0 0 0
5 17 3 2 0
6
7
8
4、 輸出二叉樹(shù)(即輸出數(shù)組)。
將二叉樹(shù)按上表以表格形式在屏幕上輸出即可。
作者:recluse 發(fā)表時(shí)間:2008-10-14 12:20:00
第3樓
#includestdio.h
#includestring.h
struct{
int sport[5];
int zf;
int mc;
}student1[10];
struct{
int snum;
int zf;
int mc;
}student2[10];
void main()
{
int point[5],i,j,temp,bj=1,temp1;
int k=0;
printf("input the sport point:\n");
for(i=0;i5;i++){
printf("point%d:",i+1);
scanf("%d",point[i]); }
for(i=0;i5;i++)
{
for(j=0;j5;j++){
printf("Input Sport %d 's School Number ( Point is %d ) :\t",i+1,point[j]);
scanf("%d",k);
student1[k-1].sport[i]=point[j];
}
}
for(i=0;i10;i++)
{
for(j=0;j5;j++)
student1[i].zf=student1[i].sport[j]+student1[i].zf;
student2[i].zf=student1[i].zf;
student2[i].snum=i+1;
}
for(i=0;i9;i++)
{
k=1;
for(j=0;j9-i;j++)
if (student2[j+1].zfstudent2[j].zf) {
temp=student2[j].zf;
temp1=student2[j].snum;
student2[j].zf=student2[j+1].zf;
student2[j].snum=student2[j+1].snum;
student2[j+1].zf=temp;
student2[j+1].snum=temp1;
k=0;
}
if(k) break;
}
for(i=0;i10;i++)
{
if(student2[i+1].zf==student2[i].zf) student2[i].mc=bj;
else student2[i].mc=bj++;
}
for(i=0;i10;i++)
{
for(j=0;j10;j++)
if(student2[i].snum==j+1) student1[j].mc=student2[i].mc;
}
printf("\t\t\t\tFORM 1\n\n");
printf("School Number:\tSport1:\tSport2:\tSport3:\tSport4:\tSport5:\tSum:\tResult:\n");
for(i=0;i10;i++) {
printf(" %d\t ",i+1);
for(j=0;j5;j++)
printf("%d\t ",student1[i].sport[j]);
printf("%d\t %d\n",student1[i].zf,student1[i].mc);
printf("\n\n");
}
printf("Press Any Butter\n\n");
getch();
printf("\t\t\tFORM 2\n\n");
printf("School Number:\tSum:\tResult:\n");
for(i=0;i10;i++)
{
printf("\t%d\t %d\t %d\n",student2[i].snum,student2[i].zf,student2[i].mc);
}
printf("\n\nPress Any Butter\n\n");
getch();
printf("\n\n");
while(1)
{
printf("Input You Want To Find The School Number(1-10):\t");
scanf("%d",k) ;
printf("\n\n");
for(i=0;i10;i++){
if(k==i+1){
printf("School Number:\tSport1:\tSport2:\tSport3:\tSport4:\tSport5:\tSum:\tResult:\n");
printf(" %d\t ",k);
for(j=0;j5;j++)
printf("%d\t ",student1[i].sport[j]);
printf("%d\t %d\n\n",student1[i].zf,student1[i].mc); }
}
}
}
寫(xiě)給你了,請(qǐng)發(fā)JAVA版塊
package other;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 定義了一種接口,要進(jìn)行編碼的最小單元類(lèi)必需實(shí)現(xiàn)些接口
*
*/
interface CombinableT extends ComparableT {
T combinate(T a, T b);
}
/**
*
* the huffman tree Class 哈夫曼樹(shù),包括當(dāng)前節(jié)點(diǎn)數(shù)據(jù)信息,左節(jié)點(diǎn),右節(jié)點(diǎn)信息。
*/
class HuffmanTreeT extends CombinableT implements
ComparableHuffmanTreeT {
/** the root of huffman tree */
private T root;
/** the left node of huffman tree */
private HuffmanTreeT left;
/** the right node of huffman tree */
private HuffmanTreeT right;
/** 哈夫曼編碼字符串,如:0000110 */
private String huffmanCodeString = "";
/** 是否對(duì)最終生成的哈夫曼進(jìn)行過(guò)編碼操作 */
private static boolean isSettedHuffmanCoderString = false;
public T getRoot() {
return root;
}
public void setRoot(T root) {
this.root = root;
}
public HuffmanTreeT getLeft() {
return left;
}
public void setLeft(HuffmanTreeT left) {
this.left = left;
}
public HuffmanTreeT getRight() {
return right;
}
public void setRight(HuffmanTreeT right) {
this.right = right;
}
/**
*
* 重寫(xiě)此方法用于遞歸合并節(jié)點(diǎn)后進(jìn)行排序操作
*
*/
public int compareTo(HuffmanTreeT o) {
return o.getRoot().compareTo(this.getRoot());
}
public String toString() {
return "the root:" + this.getRoot() + "\r\nthe left:" + this.getLeft()
+ "\r\nthe right:" + this.getRight();
}
/**
*
* 對(duì)最終生成的樹(shù)進(jìn)行哈夫曼編碼,使每個(gè)葉子節(jié)點(diǎn)生成01的路徑編碼
*
*/
private void setHuffmanCoderString() {
HuffmanTreeT left = this.getLeft();
// 如果有左節(jié)點(diǎn)則在路徑中追加"0"
if (left != null) {
left.huffmanCodeString = this.huffmanCodeString + "0";
left.setHuffmanCoderString();// 遞歸編碼
}
HuffmanTreeT right = this.getRight();
// 如果有右節(jié)點(diǎn)則在路徑中追加"1"
if (right != null) {
right.huffmanCodeString = this.huffmanCodeString + "1";
right.setHuffmanCoderString();// 遞歸編碼
}
}
public void printHuffmanCoderString() {
// 打印最終生成樹(shù)的哈夫曼編碼前要進(jìn)行編碼操作,
// 且此操作只執(zhí)行一次,所以用全局標(biāo)識(shí)變量判斷
if (!HuffmanTree.isSettedHuffmanCoderString) {
this.setHuffmanCoderString();
HuffmanTree.isSettedHuffmanCoderString = true;// 標(biāo)識(shí)已執(zhí)行過(guò)編碼
}
// 如果是葉子節(jié)點(diǎn)(即要編碼的單元),則打印出編碼信息,如果是非葉子結(jié)點(diǎn)(中間臨時(shí)生成的節(jié)點(diǎn)),則不打印
if (this.left == null this.right == null)
System.out.println("the " + this.getRoot() + " huffmanCoder:"
+ this.huffmanCodeString);
if (this.left != null)
this.left.printHuffmanCoderString();// 遞歸打印
if (this.right != null)
this.right.printHuffmanCoderString();// 遞歸打印
}
}
/**
*
* 用類(lèi)用于生成一個(gè)哈夫曼樹(shù)
*/
class HuffmanTreeFactoryT extends CombinableT {
/** 初始時(shí)一個(gè)list列表當(dāng)作要編碼的單元類(lèi)的容器 */
private ListHuffmanTreeT HuffmanTreeCollection;
/**
*
* @param unitClasses
* 待編碼的單元類(lèi)集合
*
*/
public HuffmanTreeFactory(ListT unitClasses) {
if (unitClasses == null || unitClasses.size() == 0)
throw new IllegalArgumentException(
"the unit classes collection can't be empty");
HuffmanTreeCollection = new LinkedListHuffmanTreeT();
// 初始化哈夫曼集合容器
for (T unitClass : unitClasses) {
HuffmanTreeT huffmanTree = new HuffmanTreeT();
huffmanTree.setRoot(unitClass);
huffmanTree.setLeft(null);
huffmanTree.setLeft(null);
HuffmanTreeCollection.add(huffmanTree);
}
Collections.sort(HuffmanTreeCollection);
}
/**
* 將待編碼的哈夫曼集合處理成只含有一個(gè)元素的集合,則這最后一個(gè)元素 即為最終生成的哈夫曼樹(shù)
*/
private void generateHuffmanTree() {
while (true) {
if (HuffmanTreeCollection == null
|| HuffmanTreeCollection.size() = 1)
break;
// 處理之前一定要重新排序,這是哈夫曼編碼的關(guān)鍵原理
Collections.sort(HuffmanTreeCollection);
HuffmanTreeT huffmanTreeOne = HuffmanTreeCollection.remove(0);
HuffmanTreeT huffmanTreeTwo = HuffmanTreeCollection.remove(0);
HuffmanTreeT huffmanTreeNew = new HuffmanTreeT();
// 將集合中前面兩個(gè)元素合并成一個(gè)元素插到集合中去
// 并將第一個(gè)元素和第二個(gè)元素分別作為新元素的左,右節(jié)點(diǎn)
huffmanTreeNew.setRoot(huffmanTreeOne.getRoot().combinate(
huffmanTreeOne.getRoot(), huffmanTreeTwo.getRoot()));
huffmanTreeNew.setLeft(huffmanTreeOne);
huffmanTreeNew.setRight(huffmanTreeTwo);
HuffmanTreeCollection.add(huffmanTreeNew);
}
}
/**
*
*
*
* @return 生成最終的哈夫曼樹(shù)
*
*/
public HuffmanTreeT getHuffmanTree() {
generateHuffmanTree();
return this.HuffmanTreeCollection.get(0);
}
}
/**
* 自定義一個(gè)用于測(cè)試的單元類(lèi)
*/
class UnitClass implements Serializable, CombinableUnitClass {
/** 出現(xiàn)概率數(shù)據(jù) */
private int rate;
public UnitClass(int rate) {
this.rate = rate;
}
public int getRate() {
return rate;
}
public void setRate(int rate) {
this.rate = rate;
}
/**
* implements thid compartTo() in order to sort the
*
* collection stored from unitclass
*/
public int compareTo(UnitClass o) {
return o.getRate() this.rate ? 1 : o.getRate() this.rate ? -1 : 0;
}
public String toString() {
return "the rate is:" + rate;
}
/**
*
* 重寫(xiě)此方法用于哈夫曼編碼時(shí)可以合并兩個(gè)分支點(diǎn)信息
*
*/
public UnitClass combinate(UnitClass a, UnitClass b) {
if (a == null || b == null)
return null;
return new UnitClass(a.getRate() + b.getRate());
}
}
public class Test {
public static int counter(String s, char c) {
int count = 0;
for (int i = 0; i s.length(); i++) {
if (s.charAt(i) == c) {
count++;
}
}
return count;
}
public static void main(String[] args) {
String str = "你好呵呵123abbeab啊";
ListUnitClass l = new ArrayListUnitClass();
for (int i = 0; i str.length(); i++) {
char c = str.charAt(i);
System.out.println(c + "出現(xiàn)了" + counter(str, c) + "次");
l.add(new UnitClass(c));
}
HuffmanTreeFactoryUnitClass factory = new HuffmanTreeFactoryUnitClass(
l);
factory.getHuffmanTree().printHuffmanCoderString();
}
}
可以參考一下以下的代碼:
/*
* 求哈夫曼樹(shù)
*/
public class BinaryTree {
TreeNode[] node;
public BinaryTree(int[] w) {
int n = w.length;
node = new TreeNode[n];
node = initTree(node,n,w);
display(node,n);
node = createTree(node,n,w);
display2(node,n);
}
private void display2(TreeNode[] node2, int n) {
System.out.println("====================================================");
System.out.println("index\tweight\tleft\tright\tparent");
for(int i=0;in;i++)
{
System.out.println(i+"\t"+node2[i].getWeight()+"\t"+node2[i].left+"\t"+node2[i].right+"\t"+node2[i].parent.getWeight());
}
for(int i=n;i2*n-2;i++)
{
System.out.println(i+"\t"+node2[i].getWeight()+"\t"+node2[i].left.getWeight()+"\t"+node2[i].right.getWeight()+"\t"+node2[i].parent.getWeight());
}
System.out.println(2*n-2+"\t"+node2[2*n-2].getWeight()+"\t"+node2[2*n-2].left.getWeight()+"\t"+node2[2*n-2].right.getWeight()+"\t"+node2[2*n-2].parent);
}
private void display(TreeNode[] node2, int n) {
System.out.println("====================================================");
System.out.println("index\tweight\tleft\tright\tparent");
for(int i=0;i2*n-1;i++)
{
System.out.println(i+"\t"+node2[i].getWeight()+"\t"+node2[i].left+"\t"+node2[i].right+"\t"+node2[i].parent);
}
}
private TreeNode[] initTree(TreeNode[] a,int n,int[] weight) {
a=new TreeNode[2*n-1];
for(int i=0;i2*n-1;i++)
{
if(in)
a[i]=new TreeNode(weight[i]);
else
a[i]=new TreeNode(0);
}
return a;
}
private TreeNode[] createTree(TreeNode[] a, int n, int[] w) {
for(int i=n;i2*n-1;i++)
{
int min=65566,cmin=65566;
int x=0,cx=0;
for(int j=0;ji;j++)
{
if(a[j].parent==nulla[j].getWeight()min)
{
cmin=min;
cx=x;
min=a[j].getWeight();
x=j;
}
else if(a[j].parent==nulla[j].getWeight()cmin)
{
cmin=a[j].getWeight();
cx=j;
}
}
a[i].setWeight(min+cmin);
a[i].left=new TreeNode(x);
a[i].right=new TreeNode(cx);
a[x].parent=new TreeNode(i);
a[cx].parent=a[x].parent;
}
return a;
}
public static void main(String[] args) {
int[] w = new int[]{1,2,3,4,5,6,7,8,9};
new BinaryTree(w);
}
}
class TreeNode {
private int weight;
TreeNode left;
TreeNode right;
TreeNode parent;
public TreeNode(int weight) {
this.weight = weight;
this.left = null;
this.right = null;
this.parent = null;
}
public int getWeight() {
return this.weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
我記得有一本書(shū),叫java算法設(shè)計(jì),找一下看看會(huì)不會(huì)對(duì)你有幫助...
只要自己再加個(gè)類(lèi)Tree就可以了。
代碼如下:
public class Tree {
double lChild, rChild, parent;
public Tree (double lChild, double rChild, double parent) {
this.lChild = lChild;
this.rChild = rChild;
this.parent = parent;
}
public double getLchild() {
return lChild;
}
public void setLchild(double lChild) {
this.lChild = lChild;
}
public double getRchild() {
return rChild;
}
public void setRchild(double rChild) {
this.rChild = rChild;
}
public double getParents() {
return parent;
}
public void setParents(double root) {
this.parent = root;
}
}
親,你這是在考驗(yàn)這個(gè)題目的難度啊,
首先:學(xué)生注冊(cè)登記,他是數(shù)據(jù)庫(kù)的插入操作、還是利用集合(collection)、數(shù)組等進(jìn)行存儲(chǔ)
再者:分析可知可能是數(shù)據(jù)庫(kù),你也沒(méi)說(shuō)是那種數(shù)據(jù)庫(kù),每種數(shù)據(jù)庫(kù)的連接方式也不同
最后:怎么進(jìn)行寫(xiě)代碼, 這個(gè)不只是代碼的要求,你提取的數(shù)據(jù)是打印在控制臺(tái),還是用圖形化界面,還是網(wǎng)頁(yè)...等等 一系類(lèi)問(wèn)題你沒(méi)有說(shuō)清楚啊。
以上回答你滿(mǎn)意么?