本帖最后由 liguangcaiup 于 2013-7-11 09:53 编辑
第一题- public class test1 {
- // 1、键盘录入一个正整数,将其分解质因数。如:输入30,打印出30=2*3*5。
- public static void main(String[] args) throws Exception {
- // 接受一个正整数
- Scanner in = new Scanner(System.in);
- int num = in.nextInt();
- if (isPrime(num)) { // 若num是素数直接输出结果
- System.out.println(num + "=" + 1 + "*" + num);
- return;
- }
- System.out.print(num + "=");
- for (int i = 2; i <= num; i++) {
- if (isPrime(i)) { // 是素数时继续
- if (0 == num % i) {
- while (true) { // 此循环处理连续质因数问题
- System.out.print(i);
- num /= i;
- if (num != 1)
- System.out.print("*");
- if (num % i != 0) // 若不能被i整除 是否有连续的质因数如:4=2*2
- break;
- }
- }
- }
- }
- }
- public static boolean isPrime(int num) { // 判断是否素数
- if (1 == num)
- return false;
- if (2 == num)
- return true;
- double n = Math.sqrt(num);
- for (int i = 2; i <= n; i++) {
- if (0 == num % i)
- return false;
- }
- return true;
- }
- }
复制代码 运行结果:
1000
1000=2*2*2*5*5*5
30
30=2*3*5
第二题:- import java.util.ArrayList;
- import java.util.Random;
- public class test2 {
- /*
- * 求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
- * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
- * (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],而是被存入了数组中的某个角标上)
- */
- public static void main(String[] args) {
- ArrayList<Integer> arrayList = new ArrayList<Integer>();
- Random r = new Random();
- for (int i = 1; i <= 100; i++) { // 记录100以内的素数
- if (isPrime(i))
- arrayList.add(i);
- }
-
- //输出arrayList 中记录的素数
- System.out.println("arrayList 中记录的素数::");
- for (int i = 0,flag=0; i < arrayList.size(); i++) {
- System.out.print(arrayList.get(i)+" ");
- flag++;
- if(flag==10){
- System.out.println();
- flag=0;
- }
- }
-
- // 把记录无序的存入数组中
- int length = arrayList.size();
- int[] nums = new int[length+1];
- int n,index;
- for (int i = 0; i < length; i++) {
- n = arrayList.size();
- if(0==n) //数据已经全部随机加入int[]
- break;
- index = r.nextInt(n);
- nums[i] = arrayList.get(index);
- arrayList.remove(index);
- }
- //产生一个随机素数,并加入最后位置
- int randomNum = r.nextInt(length);
- nums[length] = nums[randomNum];
-
- //输出"无序存入int[],并加入最后一个随机素数后的数据
- System.out.println();
- System.out.println("无序存入int[],并加入最后一个素数后的数据::");
- for (int i = 0,flag=0; i <length+1; i++) {
- System.out.print(nums[i]+" ");
- flag++;
- if(flag==10){
- System.out.println();
- flag=0;
- }
- }
-
- //找出与最后一个素数相同的元素下标
- for (int i = 0; i < length; i++) {
- if(nums[length]==nums[i]){
- System.out.println();
- System.out.println("与最后一个素数位置相同的元素下标::"+i);
- }
-
- }
- }
- public static boolean isPrime(int num) { // 判断是否素数
- if (1 == num)
- return false;
- if (2 == num)
- return true;
- double n = Math.sqrt(num);
- for (int i = 2; i <= n; i++) {
- if (0 == num % i)
- return false;
- }
- return true;
- }
- }
复制代码 运行结果:
arrayList 中记录的素数::
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
无序存入int[],并加入最后一个随机素数后的数据::
11 37 3 2 23 31 7 61 79 13
89 17 73 19 71 53 67 59 41 5
97 83 29 43 47 31
与最后一个素数位置相同的元素下标::5
第三题:- package test;
- import java.io.*;
- import java.util.ArrayList;
- public class test3 {
- /*
- * 3、在一个文件夹内有文件夹和文件,文件名的格式为:数字+名称.java。
- * 要求:把所有的.java文件复制一份,变为文件名格式为:数字+名称+数字.java。
- * (其中数字是相对应的,名称由字母组成。如:01Demo.java——>01Demo01.java)
- */
- public static void main(String[] args) throws IOException {
- File file = new File("f://day24");
- File file2 = new File("e:");
- copyDir(file, file2);
- }
- // 复制文件夹
- static void copyDir(File srcDir, File desDir) throws IOException {
- File dir = new File(desDir, srcDir.getName()); // 先创建文件夹
- System.out.println(dir + " 复制结果::" + dir.mkdir()); //输出文件夹拷贝成功与否
- File[] files = srcDir.listFiles();
- for (int i = 0; i < files.length; i++) {
- if (files[i].isDirectory()) //如果是文件夹递归调用copyDir
- copyDir(files[i], dir);
- else {
- if (files[i].getName().endsWith(".java")) { //如果是.java文件调用copyFile
- File tfile = new File(dir,setFileName(files[i].getName()));
- copyFile(files[i], tfile);
- }
- }
- }
- }
- //处理文件名 01Demo.java——>01Demo01.java
- public static String setFileName(String oldName){
- ArrayList<Character> num = new ArrayList<Character>();
- String[] str = oldName.split("\\.");
- char[] name = str[0].toCharArray();
- for (int i = 0; i < name.length; i++) { //得到名字中的前导数字
- if(name[i]>='0'&&name[i]<='9')
- num.add(name[i]);
- else
- break;
- }
- String strNum="";
- for(char ch: num) //前导数字存入strNum
- strNum+=ch;
- return str[0]+strNum+".java";
- }
-
- // 复制文件
- static void copyFile(File srcFile, File desFile) throws IOException {
- BufferedInputStream bufis = null;
- BufferedOutputStream bufos = null;
- try {
- //文件复制用到的流
- bufis = new BufferedInputStream(new FileInputStream(srcFile));
- bufos = new BufferedOutputStream(new FileOutputStream(desFile));
- byte[] buf = new byte[1024 * 4];
- int len;
- //复制文件
- while ((len = bufis.read(buf)) != -1) {
- bufos.write(buf, 0, len);
- bufos.flush();
- }
- //输出复制的成功与否
- System.out.println(srcFile + " 复制结果::ture");
- } catch (IOException e) {
- throw e;
- } finally {
- bufos.close();
- bufis.close();
- }
-
- }
- }
复制代码 运行结果:
字数超过限制了, 控制台结果 在第五张图片 |
-
1.jpg
(75.15 KB, 下载次数: 0)
源文件夹
-
2.jpg
(70.95 KB, 下载次数: 0)
源文件夹内文件夹
-
3.jpg
(66.91 KB, 下载次数: 0)
复制文件夹
-
4.jpg
(67.48 KB, 下载次数: 0)
复制文件夹内文件夹
-
5.jpg
(39.46 KB, 下载次数: 0)
控制台结果
组图打开中,请稍候......
|