JAVA特性 大数阶乘 难度系数 ★.

Slides:



Advertisements
Similar presentations

Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
第四单元 100 以内数的认识
第四单元 100 以内数的认识
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
项目6 通用堆栈.
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
复习 An = n(n-1)(n-2)…(n-m+1) A = m n﹗ m n (n-m)﹗
组 合 复习 引入 探求1 探求2 组合 练习1 例1 巩固1 巩固2 小结 作业 公式.
第三章 控制结构.
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
C语言程序设计 第十二章 位运算.
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
物件導向程式設計 (Object-Oriented rogramming)
選擇排序法 通訊一甲 B 楊穎穆.
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
If … else 選擇結構 P27.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
程式設計實作.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
程式撰寫流程.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
C语言 程序设计基础与试验 刘新国、2012年秋.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C Programming in Action
1.2.1排列(一).
1.2.2 组合(一).
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
辅导课程八.
Week 2: 程式設計概念與 演算法的效能評估
JAVA 编 程 技 术 主编 贾振华 2010年1月.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章 Java基本语法 讲师:复凡.
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
主编:钟元生 赵圣鲁.
C程序设计.
第5章 函 数.
第二章 Java基本语法 讲师:复凡.
第二章 类型、对象、运算符和表达式.
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
龍老師我不會Debug QQ.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
迴圈(重複性結構) for while do while.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
判斷(選擇性敘述) if if else else if 條件運算子.
第3讲 概率论初步 3.1 概率 条件概率和加法公式 3.3 计数原则.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

JAVA特性 大数阶乘 难度系数 ★

大数阶乘 输入不超过1000的正整数n,输出 n!=1×2×3×…×n的精确结果。 样例输入:30 样例输出:265252859812191058636308480000000

较小数的阶乘程序 #include <stdio.h> int main() { int i, n, product=1; scanf("%d", &n); for(i=1; i<=n; i++) product = product * i; printf("%d\n", product); return 0; } import java.util.Scanner; public class P209_Basic { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int i, n, product=1; n = cin.nextInt(); for(i=1; i<=n; i++) product = product * i; System.out.printf("%d\n", product); }

从小数阶乘到大数阶乘 import java.math.BigInteger; import java.util.Scanner; public class P209 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int i, n = cin.nextInt(); BigInteger product = BigInteger.ONE; for (i=1; i<=n; i++) product =product.multiply(BigInteger.valueOf(i)); System.out.println(product); } import java.util.Scanner; public class P209_Basic { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int i, n, product=1; n = cin.nextInt(); for(i=1; i<=n; i++) product = product * i; System.out.printf("%d\n", product); }

JAVA特性 棋盘放麦子 2012年 预赛 难度系数 ★

棋盘放麦子 你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘格放8粒麦子,……后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有64格)。 国王以为他只是想要一袋麦子而已,哈哈大笑。 当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用! 请你借助计算机准确地计算,到底需要多少粒麦子。

答案算好了吗?

组合数 从4个人中选2个人参加活动,一共有6种选法。从n个人中选m个人参加活动,一共有多少种选法?下面的函数实现了这个功能。 int f(int n, int m) { if(m>n) return 0; if(m==0) _______________; return f(n-1,m-1) + _____________; }

递归 全排列 方法 《算法竞赛入门经典》 难度系数 ★★

3和4的全排列 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 全排列数 f(n)=n!

关键:递归函数的定义 定义: void print_permutation(int n, int A[], int cur) 使用: print_permutation(6, A, 0); n个数字进行排列,结果放置在数组A中。 从 cur 这个位置开始放置数字,直到n个数字全部完成排列。 1 2 3 4 5 cur

递归的套路 int fac(int n) /* 计算n的阶乘*/ { if(n==0||n==1) return 1; return fac(n-1)*n; } 终止条件; 自己做点事,剩下的让别人去做吧

全排列的递归算法 1 2 3 4 5 cur void print_permutation(int n, int A[], int cur) { int i, j; if (cur==n) { // 递归边界 for (i=0; i<n; i++) printf("%d ", A[i]); printf("\n"); return; } for (i=1; i<=n; i++) { // 尝试在A[cur]中填各种整数i int ok = 1; for (j=0; j<cur; j++) if (A[j]==i) ok = 0; // 如果i已经在A[0]~A[cur-1]出现过,则不能再选 if (ok==1) { A[cur] = i; print_permutation(n, A, cur+1); 1 2 3 4 5 cur

数字 i 是否可以放在 cur 位置 #include <stdio.h> int main() { int A[6] = {3,2,4,0,0,0}; int i, j, cur, ok=1; scanf("%d", &i); cur = 3; for (j=0; j<cur; j++) if (A[j]==i) ok = 0; printf((ok==1)?"Yes\n":"No\n"); return 0; } 1 2 3 4 5 cur