1. 程式人生 > >綜合案例

綜合案例

parse 分解質因數 字符串 isf read 核桃 left ice adl

6-1-水仙花數(最少是3位數)
是指一個n位數(n≥3),它的每個位上的數字的n次冪之和等於它本身
例:在控制臺中輸出1000以內的所有水仙花數
查找問題
查找樣本:100-999
查找目標:是不是水仙花數
找到後操作:輸出目標數據
實現代碼:
for (int i = 100; i <= 999; i++)
{
/* if( i 是不是一個水仙花數)
{
Console.WiteLine(i);
}
*/
//註:如何判斷一個三位數i是不是水仙花數
int a = i / 100 % 10;
int b = i / 10 % 10;
int c = i / 1 % 10;
if (a * a * a + b * b * b + c * c * c ==i)
{
Console.WriteLine(i);
}
}
→ 輸出i的值為153,370,371,407
是指一個n位數(n≥3),它的每個位上的數字的n次冪之和等於它本身
例:在控制臺中輸出1000以內的所有水仙花數
查找問題
查找樣本:100-999
查找目標:是不是水仙花數
找到後操作:輸出目標數據
實現代碼:
for (int i = 100; i <= 999; i++)
{
/* if( i 是不是一個水仙花數)
{
Console.WiteLine(i);
}
*/
//註:如何判斷一個三位數i是不是水仙花數
int a = i / 100 % 10;
int b = i / 10 % 10;
int c = i / 1 % 10;
if (a * a * a + b * b * b + c * c * c ==i)
{
Console.WriteLine(i);
}
}
→ 輸出i的值為153,370,371,407
6.2-分解質因數
任何一個合數(0和1除外),都可以分解為多個質數相乘
合數:除了1和它本身還能被其它數整除
代碼示例:
//提示用戶輸入一個合數,將合數保存在變量number中
int number;
while (true)
{
Console.Write("請輸入一個合數(大於1):");
number = int.Parse(Console.ReadLine());
if (number <= 1)
{
Console.Write("輸入有誤,重新輸入大於1的數字,按回車鍵繼續");
Console.ReadLine();
Console.Clear();
}
else
{
bool isFind = false;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//不是質數
break;
}
else
{
//是質數
Console.Write("輸入有誤,輸入的數字必須是合數,按回車鍵繼續");
Console.ReadLine();
Console.Clear();
}
}
}
//2、得到變量number所有的質因數,把它們保存到集合factor中
List<int> factors = new List<int>();
int n = number;
while (n != 1)
{
for (int i = 2; i <= n; i++)
{
if(n % i == 0)
{
n = n / i;
factors.Add(i);
break;
}
}
}
//輸出結果
string result = number + "=";
for (int i = 0; i < factors.Count; i++)
{
result = result + factors[i];//可以簡寫為result += factors[i]
if (i < factors.Count - 1)
{
result += "x";
}
}
Console.Write(result);
Console.ReadLine();

6-3-斐波拉契數列
例:
1,1,2,3,5, 8, 13……
前兩位 = 1
第 i 為 = 第 i-1 位 + 第 i - 2 位
代碼示例
//獲取用戶輸入的長度,保存到變量 n 中
Console.Write("請輸入斐波拉契數列的長度:");
int n = int.Parse(Console.ReadLine());
//創建長度為 n 的數字,依次保存沒一位數字
int[] number = new int[n];
//給每一項賦值
for (int i = 0; i < number.Length; i++)
{
if (i <= 1)
{
number[i] = 1;
}
else
{
number[i] = number[i - 1] + number[i - 2];
}
}
//遍歷輸出數字內容
foreach (int item in number)
{
Console.Write(item + "\t");
}
Console.ReadLine();
6-4-買桃問題
代碼示例:
桃子3元一個,3個核桃可以換一個桃子,你擁有100元,最多可以吃到多少個桃子
int money = 100, price = 3, exchange = 3;
int eated, kernel;
eated = money / price;
kernel = eated;
while (kernel >= exchange)
{
//換取桃子
int peach = kernel / exchange;
//計算剩余桃核
int left = kernel % exchange;
//吃掉桃子
eated += peach;
//計算當前擁有的桃核
kernel = left + peach;
}
Console.Write("最多可以吃到" + eated + "個桃子");
Console.ReadLine();
6-5- 哥德巴赫猜想
代碼示例:
//哥德巴赫猜想:任何一個大於2的偶數,都可以被分解為兩個質數相加
//提示並獲取用戶輸入的偶數,保存到變量number中
int number;
while(true)
{
Console.Write("請輸入一個大於2的偶數:");
number = int.Parse(Console.ReadLine());
if(number <= 2 || number % 2 != 0)
{
Console.Write("你輸入的有誤,請重新輸入一個大於2的偶數:");
Console.ReadLine();
Console.Clear();
}
else
{
break;
}
}
//分解number,找到兩個質數,他們的和等於number,把它們分別保存在變量 i 和 j 中
//i: 2—number - 2
int i, j = 0;
for ( i = 2; i < number - 1; i++)
{
j = number - i;
bool isFind = false;
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//i不是質數
continue;
}
else
{
// i 是質數

}
isFind = false;
for (int k = 2; k < j; k++)
{
if (j % k == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//j 不是質數
}
else
{
//j是質數
break;
}
}


//輸出結果
string result = number + "=" + i + "+" + j;
Console.WriteLine(result);
Console.ReadLine();
6-6-反序輸出
反序輸出的完整實現:
//獲取用戶輸入,將用戶的輸入保存到挺普通中
Console.Write("請輸入一個字符串:");
string input = Console.ReadLine();
反序變量input,將其字符保存到reverse中
string reverse = "" ;
for(int i = input.Length - 1; i--)
{
reverse += input[i]
}
輸出結果:
Console.Write(reverse + ":是串符字的入輸你");

6-7-控制臺日歷控制臺日立
任何一個合數(0和1除外),都可以分解為多個質數相乘
合數:除了1和它本身還能被其它數整除
代碼示例:
//提示用戶輸入一個合數,將合數保存在變量number中
int number;
while (true)
{
Console.Write("請輸入一個合數(大於1):");
number = int.Parse(Console.ReadLine());
if (number <= 1)
{
Console.Write("輸入有誤,重新輸入大於1的數字,按回車鍵繼續");
Console.ReadLine();
Console.Clear();
}
else
{
bool isFind = false;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//不是質數
break;
}
else
{
//是質數
Console.Write("輸入有誤,輸入的數字必須是合數,按回車鍵繼續");
Console.ReadLine();
Console.Clear();
}
}
}
//2、得到變量number所有的質因數,把它們保存到集合factor中
List<int> factors = new List<int>();
int n = number;
while (n != 1)
{
for (int i = 2; i <= n; i++)
{
if(n % i == 0)
{
n = n / i;
factors.Add(i);
break;
}
}
}
//輸出結果
string result = number + "=";
for (int i = 0; i < factors.Count; i++)
{
result = result + factors[i];//可以簡寫為result += factors[i]
if (i < factors.Count - 1)
{
result += "x";
}
}
Console.Write(result);
Console.ReadLine();

6-3-斐波拉契數列
例:
1,1,2,3,5, 8, 13……
前兩位 = 1
第 i 為 = 第 i-1 位 + 第 i - 2 位
代碼示例
//獲取用戶輸入的長度,保存到變量 n 中
Console.Write("請輸入斐波拉契數列的長度:");
int n = int.Parse(Console.ReadLine());
//創建長度為 n 的數字,依次保存沒一位數字
int[] number = new int[n];
//給每一項賦值
for (int i = 0; i < number.Length; i++)
{
if (i <= 1)
{
number[i] = 1;
}
else
{
number[i] = number[i - 1] + number[i - 2];
}
}
//遍歷輸出數字內容
foreach (int item in number)
{
Console.Write(item + "\t");
}
Console.ReadLine();
6-4-買桃問題
代碼示例:
桃子3元一個,3個核桃可以換一個桃子,你擁有100元,最多可以吃到多少個桃子
int money = 100, price = 3, exchange = 3;
int eated, kernel;
eated = money / price;
kernel = eated;
while (kernel >= exchange)
{
//換取桃子
int peach = kernel / exchange;
//計算剩余桃核
int left = kernel % exchange;
//吃掉桃子
eated += peach;
//計算當前擁有的桃核
kernel = left + peach;
}
Console.Write("最多可以吃到" + eated + "個桃子");
Console.ReadLine();
6-5- 哥德巴赫猜想
代碼示例:
//哥德巴赫猜想:任何一個大於2的偶數,都可以被分解為兩個質數相加
//提示並獲取用戶輸入的偶數,保存到變量number中
int number;
while(true)
{
Console.Write("請輸入一個大於2的偶數:");
number = int.Parse(Console.ReadLine());
if(number <= 2 || number % 2 != 0)
{
Console.Write("你輸入的有誤,請重新輸入一個大於2的偶數:");
Console.ReadLine();
Console.Clear();
}
else
{
break;
}
}
//分解number,找到兩個質數,他們的和等於number,把它們分別保存在變量 i 和 j 中
//i: 2—number - 2
int i, j = 0;
for ( i = 2; i < number - 1; i++)
{
j = number - i;
bool isFind = false;
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//i不是質數
continue;
}
else
{
// i 是質數

}
isFind = false;
for (int k = 2; k < j; k++)
{
if (j % k == 0)
{
isFind = true;
break;
}
}
if (isFind)
{
//j 不是質數
}
else
{
//j是質數
break;
}
}


//輸出結果
string result = number + "=" + i + "+" + j;
Console.WriteLine(result);
Console.ReadLine();
6-6-反序輸出
反序輸出的完整實現:
//獲取用戶輸入,將用戶的輸入保存到挺普通中
Console.Write("請輸入一個字符串:");
string input = Console.ReadLine();
反序變量input,將其字符保存到reverse中
string reverse = "" ;
for(int i = input.Length - 1; i--)
{
reverse += input[i]
}
輸出結果:
Console.Write(reverse + ":是串符字的入輸你");

綜合案例