如何用python和java分別寫出10道經(jīng)典題(含代碼)
1.求第100項之和
已知1、1、2、3、5、8、13......就是從第三項開始,每一項等于前兩項之和。求第100項。
斐波那契數(shù)列 第100項
數(shù)列:1, 1, 2, 3, 5, 8, 13, …從第三項起,每一項等于前兩項之和。求第100項的值。
用兩個變量 a 和 b 分別 表示當前項的前兩項從第3項開始循環(huán),每次計算 c = a+b ,更新 a = b , b = c循環(huán)結束 后 b 就是 第 100 項
100 項 數(shù)值很大 python 整數(shù)無上限 ,java 需要使用 BigInteger
python 代碼
a,b = 1,1
for i in range(3,101):
c = a+b
a = b
b = c
print(c)java 代碼
package a;
//數(shù)列:1, 1, 2, 3, 5, 8, 13, …
//從第三項起,每一項等于前兩項之和。求第100項的值。
import java.math.BigInteger;
public class Tm1 {
public static void main(String[] args) {
BigInteger a = BigInteger.ONE;
BigInteger b = BigInteger.ONE;
for (int i = 3; i <= 100; i++) {
BigInteger c = a.add(b); //c = a+b
a = b; //更新a
b = c; //更新b
}
System.out.println("第100項是:" + b);
}
}
2、物不知數(shù)
”出自《孫子算經(jīng)》。
題目為:今有物不知其數(shù),三三數(shù)之剩二,五五數(shù)之剩三,七七數(shù)之剩二,問物幾何?”。意思是說有一些物品,不知道有多少個,3個3個數(shù)的話,還多出2個;5個5個數(shù)則多出3個;7個7個數(shù)也會多出2個。現(xiàn)假設物品總數(shù)不超過n(n<=1000),請編程計算滿足條件的物品個數(shù)并輸出。
一個數(shù)x, 滿足:x 除以 3 余 2x 除以 5 余 3x 除以 7 余 2給定上限 n (n ≤ 1000),求出所有不超過 n 的 x。x <=1000,可以用 暴力枚舉 每個數(shù)是否同時滿足三個余數(shù)條件
python 代碼
n = int(input("請輸入物品總數(shù)上限 n (n <=1000):"))
# 遍歷 1 到 n
for i in range(1, n+1):
# 同時滿足三個條件
if i % 3==2 and i % 5==3 and i % 7==2:
print(i, end=" ")
print()

java 代碼
package a;
import java.util.Scanner;
public class Tm2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入上限 n (<=1000)");
int n = sc.nextInt();
// 遍歷 1 到 n
for (int i = 1; i <=n; i++) {
//同時滿足三個余數(shù)條件
if(i %3 ==2 && i%5 ==3 && i%7==2){
System.out.println(i + " ");
}
}
sc.close();
}
}

3、完數(shù)
一個數(shù)如果恰好等于不包含它本身所有因子之和,這個數(shù)就稱為"完數(shù)”。例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數(shù)”。編程序找出100之內(nèi)的所有完數(shù)。遍歷 2 到100(1,不是完數(shù)),對每個數(shù) i,找出所有小于i 的因子,求和,若和等于i,則輸出。
完數(shù):
一個數(shù)如'它的所有真因子(除了它自己以外的因數(shù))加起來,剛好等于它自己 ',那它 就是完數(shù)。一個數(shù)的因子(除了它自己),最大不可能超過他的一半
python 代碼
#完數(shù)
# 遍歷 2 到 100(1 不是完數(shù))。
#
# 對每個數(shù) num,用內(nèi)層循環(huán)找出所有小于 num 的因子(即 num % i == 0),累加。
#
# 若累加和等于 num,則輸出。
for num in range(2, 101):
factor_sum = 0
for i in range(1,num):
if num % i == 0:
factor_sum += i
if factor_sum == num:
print(i, end=" ")
print()

java 代碼
package a;
public class Tm3 {
public static void main(String[] args) {
for (int num = 2; num <= 100; num++) {
int factorSum = 0; // 因子和初始為0
// 找所有真因子(1到num-1)
for (int i = 1; i < num; i++) {
if (num % i == 0) { // i是num的因子
factorSum += i; // 累加
}
}
if (factorSum == num) { // 因子和等于自身,輸出
System.out.print(num + " ");
}
}
}
}

4、編程:求100到200之間的素數(shù),并統(tǒng)計其個數(shù)。
判斷素數(shù)時,只需檢查從 2 到 sqrt(n) 是否有因子。
注意 1 不是素數(shù),但范圍從 100 開始,所以沒問題。
素數(shù)(也叫質(zhì)數(shù)):一個大于 1 的整數(shù),如果只能被 1 和它自己整除,那它就是素數(shù)。
換句話說,它找不到其他的因子。
python 代碼
# 100 ~ 200 之間的素數(shù)
# 找出 100 到 200之間的素數(shù),并統(tǒng)計個數(shù)。
# 素數(shù) 只能被 1 和本身整除的數(shù)
import math
#初始化 一個計數(shù)器 變量
count = 0
#循環(huán) 讓變量 num 從100遍歷到200,
# range 包頭不包尾 所以寫201
for num in range(100, 201):
# 設置一個標志位 先假設當前的num是素數(shù)
isprime = True
# 計算當前數(shù)字的平方根,取整后加1
limit = int(math.sqrt(num))+1
# 內(nèi)層循環(huán) :試除 從2開始到 limit 結束
for i in range(2, limit):
if num % i == 0:
isprime = False
break
#若 num 能被 i 整除 余數(shù)為0 說明 它不是素數(shù) 跳出內(nèi)層循環(huán)
# 檢查標志位
if isprime:
# 打印這個素數(shù),不換行
print(num,end=' ')
# 找到一個計數(shù)器+1
count += 1
print(f"\n一共有{count}")
java 代碼
package a;
public class Tm4 {
public static void main(String[] args) {
int count =0;
System.out.println("100到200之間的素數(shù)有:");
for (int n = 100; n <=200 ; n++) {
boolean isPrime = true;
// 假設當前的 n 是 素數(shù)
for (int i = 2; i <=Math.sqrt(n); i++) {
if(n %i ==0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.print(n+" ");
count++;
}
}
System.out.println("\n\n素數(shù)的總個數(shù)" +count);
}
}

5、編程:顯示前100個回文素數(shù)。
每行顯示10個素數(shù)。(回文素數(shù)是指一個數(shù)是素數(shù)也是回文數(shù)。例如:131既是素數(shù)也是回文數(shù)。)回文素數(shù)是指既是素數(shù)又是回文數(shù)(正讀反讀相同)的數(shù)。例如 131。輸出前100個回文素數(shù),每行顯示10個。
6、利用循環(huán)程序打印如下三角形程序
外層循環(huán)控制行數(shù):從 5 到 1 遞減。
內(nèi)層循環(huán)打印星號:每行星號個數(shù)等于當前行號
python 代碼
# 打印 倒三角形
row = 5
# i 從 5 降到1,步長-1
for i in range(row,0,-1):
# 打印 i 個 * 號
print("*" * i)
print()
java 代碼
package a;
public class Tm6 {
public static void main(String[] args) {
int row = 5;
for (int i = row; i >=1; i--) {
for (int j = 1; j <=i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
7、九九乘法表
外層循環(huán) i 從 1 到 9(表示第二個乘數(shù))。
內(nèi)層循環(huán) j 從 1 到 i(表示第一個乘數(shù))。
輸出 j × i = i*j,用制表符 \t 分隔。
python 代碼
# 第7題:九九乘法表
# 外層循環(huán) i 從1到9 表示第二個乘數(shù)
for i in range(1,10): #i= 1..9
#內(nèi)層循環(huán) j 從1到i 表示第一個乘數(shù)
for j in range(1,i+1): #j = 1..i
# 輸出 j x i = i*j 用制表符 \t 分隔
print(f"{i}*{j} = {j*i}",end= '\t')
print() #內(nèi)層循環(huán)結束換行
java 代碼
package a;
public class Tm7 {
public static void main(String[] args) {
for (int i = 1; i <=9; i++) { //i 是第二個乘數(shù)
for (int j = 1; j <=i ; j++) { //j 是第一個乘數(shù)
System.out.print(j + "*" + j + "=" +(i * j) +"\t");
}
System.out.println(); //每一行結束 換行
}
}
}

8、利用循環(huán)程序,打印如下圖形。
A
BB
CCC
DDDD
EEEEE
FFFFFF
第 i 行打印 i 次同一個字母。字母 = 'A' + i - 1(利用 ASCII 碼)
ASCII碼
可以理解為 計算機里的“字符身份證號碼”計算機只認識數(shù)字,不認識字母。字母‘A’ 的身份證號碼(ASCII碼) 是 65字母‘B’是 66字母‘C’是 67...以此類推
十進制 | 十六進制 | 字符 | 說明 |
0 | 0x00 | NUL | 空字符(Null) |
7 | 0x07 | BEL | 響鈴(Bell) |
8 | 0x08 | BS | 退格(Backspace) |
9 | 0x09 | HT | 水平制表符(Horizontal Tab) |
10 | 0x0A | LF | 換行(Line Feed) |
13 | 0x0D | CR | 回車(Carriage Return) |
32 | 0x20 | 空格 | 可見為空格 |
48 | 0x30 | 0 | 數(shù)字0起始 |
65 | 0x41 | A | 大寫字母A起始 |
97 | 0x61 | a | 小寫字母a起始 |
127 | 0x7F | DEL | 刪除(Delete) |
python 代碼
# 第8題 打印怎么三角形
# 第 i 行 打印 i 次 同一個字母
# 字母 = 'A' + i - 1 (利用ASCII碼)
row = 6
for i in range(1,row+1): #i = 1到6
# 計算行應打印的字母: ord('A') = 65,加 (
ch = chr(ord("A")+i-1)
print(ch*i)

java 代碼
package a;
public class Tm8 {
public static void main(String[] args) {
// 外層循環(huán) 決定字母是什么 現(xiàn)在在第幾行
int row = 6;
for (int i = 1; i <=row; i++) {
// (char) 將算出來的數(shù)字強行變成字符
char ch = (char)('A'+ i -1);
// 計算字母 利用ASCII碼,算出當前字母
// ord('A') 得到 65
// i = 1 時;65 +0 = 65->char(65)->'A'
// i = 2 時;65 +1 = 66->char(66)->'B'
// 內(nèi)層循環(huán) 將當前字母重復打印 N 次
for (int j = 1; j <=i; j++) {
System.out.print(ch); //打印字母不換行
}
System.out.println(); //換行
}
}
}

9、輸入一段字符串,統(tǒng)計其中大寫字母、小寫字母、數(shù)字、空格和其它字符的個數(shù)。
將字符串轉換成字符數(shù)組(或使用 charAt)
遍歷每個字符,根據(jù) ASCII 范圍(或字符比較)分類:
大寫:
'A' ~ 'Z'小寫:
'a' ~ 'z'數(shù)字:
'0' ~ '9'空格:
' '其他:剩下的
每類對應一個計數(shù)器,最終輸出。
python 代碼
# 輸入一段字符串,統(tǒng)計其中大寫字母、小寫字母、數(shù)字、空格、其他字符的個數(shù)。
s = input("請輸入一段字符串:")
# 初始化5個計數(shù)器
upper = lower = digit = space = other = 0
# 遍歷字符串中的每個字符
for ch in s:
if 'A' <= ch <= 'Z': # 大寫字母
upper += 1
elif 'a' <= ch <= 'z': # 小寫字母
lower += 1
elif '0' <= ch <= '9': # 數(shù)字
digit += 1
elif ch == ' ': # 空格
space += 1
else: # 其他字符
other += 1
# 輸出結果
print(f"大寫字母: {upper}, 小寫字母: {lower}, 數(shù)字: {digit}, 空格: {space}, 其他: {other}")
java 代碼
package a;
import java.util.Scanner;
public class Tm9 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("請輸入一段字符串:");
String str = sc.nextLine(); // 讀取整行,包含空格
// 五個計數(shù)器,初始都為 0
int upper = 0; // 大寫字母個數(shù)
int lower = 0; // 小寫字母個數(shù)
int digit = 0; // 數(shù)字個數(shù)
int space = 0; // 空格個數(shù)
int other = 0; // 其他字符個數(shù)
// 使用 toCharArray() 獲得字符數(shù)組,然后用增強 for 循環(huán)遍歷
// 這樣不用關心下標,非常直觀
for (char ch : str.toCharArray()) {
// 判斷大寫字母:ASCII 中 'A' 到 'Z'
if (ch >= 'A' && ch <= 'Z') {
upper++;
}
// 判斷小寫字母:'a' 到 'z'
else if (ch >= 'a' && ch <= 'z') {
lower++;
}
// 判斷數(shù)字:'0' 到 '9'
else if (ch >= '0' && ch <= '9') {
digit++;
}
// 判斷空格:直接比較字符是否為空格
else if (ch == ' ') {
space++;
}
// 其余一律算作其他字符
else {
other++;
}
}
// 打印統(tǒng)計結果
System.out.println("大寫字母: " + upper);
System.out.println("小寫字母: " + lower);
System.out.println("數(shù)字: " + digit);
System.out.println("空格: " + space);
System.out.println("其他字符: " + other);
sc.close();
}
}10、統(tǒng)計各色色塊的數(shù)量
編程:已知有三種色塊(紅(“red”)、綠(“green”)、藍(“blue”)),現(xiàn)隨機生成50個色塊,編程統(tǒng)計各種色塊的數(shù)量,并按從大到小排序輸出。
隨機生成 + 字典計數(shù) + 排序
隨機:從顏色列表中用
random.choice抽取。計數(shù):用字典(HashMap)存儲每種顏色出現(xiàn)次數(shù)。
排序:將字典條目按值降序排序,可用
sorted或list.sort。
有 3 種色塊 red green blue
要隨機生成 50個
要統(tǒng)計 各種色塊的數(shù)量
從大到小 排序 輸出
python 代碼
import random
from collections import Counter # 專門用來計數(shù)的工具
#定義顏色
colors = ["red", "green", "blue"]
# 生成50個隨機顏色
random_colors = [random.choice(colors) for _ in range(50)]
# Counter自動統(tǒng)計每個顏色出現(xiàn)次數(shù)
counter = Counter(random_colors)
# 此時 counter 的樣子大概是:{'red': 18, 'green': 15, 'blue': 17}
# 按數(shù)量從大到小排序
sorted_items = sorted(counter.items(), key=lambda x: x[1], reverse=True)
#items()返回(顏色,數(shù)量)對,
#key=lambda x: x[1]表示按 數(shù)量 排序,
#reverse=True降序 False 是 升序
# 循環(huán)輸出
for color, count in sorted_items:
print(f"{color}: {count}")
java 代碼
兩種方法 排序的方式有不同
方法1的:
是升序
list.sort((a1,a2) -> a1.getValue() - a2.getValue());
實際意思:
如果結果是負數(shù),說明 a1 小,排前面(升序)。
如果結果是正數(shù),說明 a1 大,排后面。弱點:
這種寫法不安全。如果數(shù)字非常大(比如幾億),兩個大數(shù)相減可能會導致“溢出”(結果算錯了),雖然這道題只有 50 個球不會溢出,但在專業(yè)開發(fā)中這是被禁止的寫法
方法2的:
list.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));實際意思:
直接調(diào)用 Java 自帶的“比較”功能
優(yōu)點:
安全: 不會出現(xiàn)計算錯誤。
直觀: compareTo 就是“比較”的意思,語義更清晰。
靈活: 注意看這里寫的是 e2 比 e1,這直接實現(xiàn)了從大到?。ń敌颍?。
方法1
package a;
import java.util.*;
//編程:已知有三種色塊(紅(“red”)、綠(“green”)、藍(“blue”)),
//現(xiàn)隨機生成50個色塊,編程統(tǒng)計各種色塊的數(shù)量,并按從大到小排序輸出。
// 有 3 種色塊 red green blue
// 要隨機生成 50個
// 要統(tǒng)計 各種色塊的數(shù)量
// 從大到小 排序 輸出
public class Tm10 {
public static void main(String[] args) {
// 顏色
String [] color = {"red","green","blue"};
// 計數(shù) key 顏色 value 次數(shù)
HashMap<String,Integer> map = new HashMap<>();
// 初始化:先把紅綠藍都放進去,次數(shù)設為0
for (String s :color){
map.put(s,0);
}
Random ran = new Random();
for (int i = 0; i < 50; i++) {
// 生成 0-2 的隨機數(shù) ,對應數(shù)組的下標
int index = ran.nextInt(color.length);
String chosen = color[index]; //拿到顏色名字
map.put(chosen,map.get(chosen)+1);
}
// 準備排序 轉換成 list 列表
// HashMap 本身不能排序,需要將它轉換成 list 列表
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
// 排序
list.sort((a1,a2) -> a1.getValue() - a2.getValue());
// 循環(huán)打印 列表中每個顏色和數(shù)量 getKey 顏色 getValue 數(shù)量
for (Map.Entry<String,Integer>entry :list) {
System.out.println(entry.getKey() + ":" +entry.getValue());
}
}
}方法2
import java.util.*;
public class ColorStatistics {
public static void main(String[] args) {
String[] colors = {"red", "green", "blue"};
Random rand = new Random();
Map<String, Integer> map = new HashMap<>();
// 初始化
for (String c : colors) map.put(c, 0);
// 隨機50次
for (int i = 0; i < 50; i++) {
int idx = rand.nextInt(colors.length);
String chosen = colors[idx];
map.put(chosen, map.get(chosen) + 1);
}
// 轉換成List以便排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
// 按值降序排序
list.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));
// 輸出
for (Map.Entry<String, Integer> e : list) {
System.out.println(e.getKey() + ": " + e.getValue());
}
}
}總結
到此這篇關于如何用python和java分別寫出10道經(jīng)典題的文章就介紹到這了,更多相關python和java經(jīng)典題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用Python開發(fā)Markdown表格結構轉換為Excel工具
在數(shù)據(jù)管理和文檔編寫過程中,我們經(jīng)常使用 Markdown 來記錄表格數(shù)據(jù),但它沒有Excel使用方便,所以本文將使用Python編寫一個轉換工具,希望對大家有所幫助2025-03-03
將string類型的數(shù)據(jù)類型轉換為spark rdd時報錯的解決方法
今天小編就為大家分享一篇關于將string類型的數(shù)據(jù)類型轉換為spark rdd時報錯的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
python實現(xiàn)圖片,視頻人臉識別(opencv版)
這篇文章主要介紹了python實現(xiàn)圖像,視頻人臉識別(opencv版)的的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下2020-11-11

