算法100例------c&&c++(1-16)

閒着沒事,刷了刷菜鳥教程經典100例,在這裏分享給大家,希望大家採納,如有不足,多多指出,所有算法均在vs

2017編譯通過。

題目1:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?

程序分析:用排列組合把這四個數組成的所有三位數輸出,用篩選法除去有重複的三位數。

優化版:先判斷個位和十位是否相等,如果相等直接退出內循環,否則判斷個位和十位與百位是否相等,不相等則輸出。

#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=4;i++)
		for(int j=1;j<=4;j++)
			for (int k = 1; k <=4; k++)
			{
				if (i != j && j != k && i != k)
					cout << i << j << k << endl;
return 0;
}
//優化版
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=4;i++)
		for (int j = 1; j <= 4; j++)
		{
			if (i == j)
				continue;
			else
				for (int k = 1; k <= 4; k++)
				{
					if (i != k&&j!=k)
						cout << i << j<< k << endl;
				}
		}
return 0;
}

題目2:企業發放的獎金根據利潤提成。

  • 利潤(I)低於或等於10萬元時,獎金可提10%;
  • 利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;
  • 20萬到40萬之間時,高於20萬元的部分,可提成5%;
  • 40萬到60萬之間時高於40萬元的部分,可提成3%;
  • 60萬到100萬之間時,高於60萬元的部分,可提成1.5%;
  • 高於100萬元時,超過100萬元的部分按1%提成。

從鍵盤輸入當月利潤I,求應發放獎金總數?

此題直接用if,else語句完成。

#include<iostream>
using namespace std;
int main()
{
	double i=0;
	double bonus1, bonus2, bonus4, bonus6, bonus10, bonus;
	cout<<"你的淨利潤是:\n";
	cin >> i;
	bonus1 = 100000 * 0.1;
	bonus2 = bonus1 + 100000 * 0.075;
	bonus4 = bonus2 + 200000 * 0.05;
	bonus6 = bonus4 + 200000 * 0.03;
	bonus10 = bonus6 + 400000 * 0.015;
	if (i <= 100000) {
		bonus = i * 0.1;
	}
	else if (i <= 200000) {
		bonus = bonus1 + (i - 100000)*0.075;
	}
	else if (i <= 400000) {
		bonus = bonus2 + (i - 200000)*0.05;
	}
	else if (i <= 600000) {
		bonus = bonus4 + (i - 400000)*0.03;
	}
	else if (i <= 1000000) {
		bonus = bonus6 + (i - 600000)*0.015;
	}
	else if (i > 1000000) {
		bonus = bonus10 + (i - 1000000)*0.01;
	}
	cout << "提成爲:" << bonus << endl;
	return 0;
}

題目3:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

haha,這個題嘛!暴力解決吧。

#include<iostream>
using namespace std;
int main()
{
	for (int i = -100; i <= 10000; i++)
	{
		int a = (int)sqrt(i + 100);
		int b = (int)sqrt(i + 100 + 168);
		if ((a*a == i + 100) && (b*b == i + 100 + 168))
			cout << i << endl;
	}
	return 0;
}

另一種解法方法很不錯,分享給大家:http://www.runoob.com/cprogramming/c-exercise-example3.html

題目4:輸入某年某月某日,判斷這一天是這一年的第幾天?(swtch選擇語句解決)

#include<iostream>
using namespace std;
int main()
{
	int year, month, day;
	cout << "please input year month and day:" << endl;
	cin >> year >> month >> day;
	int sum = 0;
        int leap;
	switch (month)
	{
	case 1:sum = 0; break;
	case 2:sum = 31; break;
	case 3:sum = 59; break;
	case 4:sum = 90; break;
	case 5:sum = 120; break;
	case 6:sum = 151; break;
	case 7:sum = 181; break;
	case 8:sum = 212; break;
	case 9:sum = 243; break;
	case 10:sum = 273; break;
	case 11:sum = 304; break;
	case 12:sum = 334; break;
	default:
		cout << "data error";
		break;
	}
	sum = sum + day; // 再加上某天的天數
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {// 判斷是不是閏年
		leap = 1;
	}
	else {
		leap = 0;
	}
	if (leap == 1 && month>2) { // *如果是閏年且月份大於2,總天數應該加一天
		sum++;
	}
	cout << "這是這一年的第" << sum <<"days."<< endl;
}

題目5:輸入三個整數x,y,z,請把這三個數由小到大輸出。

整體思路是根據冒泡算法思路寫的,每次找出最大的放到最後。

#include<iostream>
using namespace std;
int main()
{
	int a, b, c;
	cout << "please input three numbers:" << endl;
	cin >> a >> b >> c;
	int max = 0;
	if (a > b) {
		max = a;
		a = b;
		b = max;
	}
	if (b >c)
	{
		max = b;
		b = c;
		c = max;
	}
	if (a >b) {
		max = a;
		a = b;
		b = max;
	}
	cout << "three numbers from small to big:" << endl;
	cout << a << " " << b << " " << c << endl;
	return 0;
}

其他思路分享:http://www.runoob.com/cprogramming/c-exercise-example5.html

題目6:用*號輸出字母C的圖案。

本題直接用輸出函數畫出圖案即可。

http://www.runoob.com/cprogramming/c-exercise-example6.html

題目8:輸出9*9口訣。

思路:for循環控制輸出即可。

#include<iostream>
using namespace std;
int main()
{
	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= i; j++)
		{
			cout << i << "*" << j << "=" << i * j<<" ";
		}
		cout << endl;
	}
	return 0;
}

題目9:要求輸出國際象棋棋盤。

程序分析:國際象棋棋盤由64個黑白相間的格子組成,分爲8行*8列。用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格,在這裏我用“#”和“@”代替了黑白塊。

#include<iostream>
using namespace std;
int main()
{
	for (int i = 1; i <= 8; i++) {
		for (int j = 1; j <= 8; j++)
		{
			if (1 == i % 2)
			{
				if (j % 2 == 1)
					cout << "#";
				else
					cout << "@";
			}
			else
			{
				if (j % 2 == 1)
					cout << "@";
				else
					cout << "#";
			}
		}
		cout << endl;
	}
	return 0;
}

 

題目10打印樓梯,同時在樓梯上方打印兩個笑臉。

程序分析:用 ASCII 1 來輸出笑臉;用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。

#include<iostream>
using namespace std;
int main()
{
	cout << "\1\1" << endl;
	for (int i = 0; i <= 10; i++) {
		for (int j = 0; j <= i; j++)
		{
			cout << "#";
		}
		cout << endl;
	}
return 0;
}

題目11:古典問題(兔子生崽):有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?(輸出前40個月即可)

程序分析:兔子的規律爲數列1,1,2,3,5,8,13,21....,即下個月是上兩個月之和(從第三個月開始)

很經典,斐波那鍥數列問題,以前寫過這個題,所以在這裏就直接分享給大家。(鏈接中的第一題就是)

https://blog.csdn.net/qq_38163244/article/details/82021021

以下這幾道題全是以前寫過的,直接分享大家,有詳細思路,java語言實現。

題目12:判斷101到200之間的素數。

題目13:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數 本身。例如:153是一個"水仙花數",因爲153=1的三次方+5的三次方+3的三次方。

題目14:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。

題目15:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

https://blog.csdn.net/qq_38163244/article/details/82021021

題目16:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

思路1:輾轉相除法,首先判斷a是否小於b,不然交換兩個值,始終保持a永遠是最大的值,求餘r=a%b,判斷餘數是否爲0如過爲0,則最大公因數爲b,否則a=b;b=r;接着求餘直到餘數d爲0,此時最大公因數爲b。

思路二:相減法,如果a,b相等,最大公因數爲兩個數的任何一個,否則當a>b時,a=a-b,b>a時,b=b-a,一直減到a=b時輸出a,b兩個數任何一個。

#include<iostream>
using namespace std;
int main()
{
	int a, b,temp;
	cout << "please input two numbers;" << endl;
	cin >> a >> b;
		if (a <=b)
		{
			temp = a;
			a = b;
			b = temp;
		}
		int r = a % b;
		int n = a * b;
		while (r != 0)
		{
			a = b;
			b = r;
			r = a % b;
		}
	cout << "這兩個數的最大公約數是" << b << endl;
	cout<<"最小公倍數是" << n/b<< endl;
	return 0;
}

//第二種方法求最大公約數
#include<iostream>
using namespace std;
int main()
{
	int a, b, temp;
	cout << "please input two numbers;" << endl;
	cin >> a >> b;
	if(a==b)
		cout<< "這兩個數的最大公約數是" << b << endl;
	else {
		do {
			if (a > b)
				a -= b;
			else
				b -= a;
		} while (a != b);
		cout << a << endl;
	}
			return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章