编程题集 (一)
編程題集 (一)
- 一個(gè)正整數(shù)序列,要求你把這個(gè)序列去重后按從小到大排序
- 輸入兩個(gè)數(shù)輸出它們的最大公約數(shù)和最小公倍數(shù)
一個(gè)正整數(shù)序列,要求你把這個(gè)序列去重后按從小到大排序
題目: 一個(gè)正整數(shù)序列,要求你把這個(gè)序列去重后按從小到大排序 第一行包含一個(gè)正整數(shù)n,表示老師給出的序列有n個(gè)數(shù)。接下來有n行, 每行一個(gè)正整數(shù)k,為序列中每一個(gè)元素的值。(1 ≤ n ≤ 10^5,1 ≤ k ≤ n)例: 5 3 3 4 1 2 結(jié)果: 1 2 3 4 題目分析: 給你一個(gè)序列 讓你去重 之后 由小到大 排序 題目給的數(shù)的個(gè)數(shù)最大范圍 是 10^5 說明我們的時(shí)間復(fù)雜度要低才能 在程序運(yùn)行時(shí)不超時(shí)代碼如下
#include <stdio.h> int main(void) {int i, n, value;int a[100001]={0};scanf("%d", &n);while(scanf("%d", &value) != EOF) //while語句也可以用 for(i=0;i<n;i++){ {scanf("%d", &value);a[value] = value; a[value] = value;} }for(i = 1; i < n + 1; i++){if(a[i]){printf("%d ",a[i]);}}return 0; } // 有個(gè)技巧就是 下標(biāo)和值是一樣的輸入兩個(gè)數(shù)輸出它們的最大公約數(shù)和最小公倍數(shù)
題目: 輸入兩個(gè)數(shù)輸出它們的最大公約數(shù)和最小公倍數(shù) 例: 20 30 輸出 10 60 最大公約數(shù)概念: 最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。 例: 20 和 30 都有的最大公因子是 10 最小公倍數(shù)概念: 兩個(gè)或多個(gè)整數(shù)公有的倍數(shù)叫做它們的公倍數(shù),其中除0以外最小的一個(gè)公倍數(shù)就叫做這幾個(gè)整數(shù)的最小公倍數(shù)。 例: 20 和 30 最小公倍數(shù)是 60下面分析 最大公約數(shù)和最小公倍數(shù) 之間的關(guān)系 20=10*2 30=10*3 分析: (2*10*10*3) 一定是公倍數(shù) 20中有10 30中也有10 而10是20和30的最大公約數(shù) 所以最小公倍數(shù)為 2*10*3=60 綜上分析: 最小公倍數(shù)=(數(shù)1*數(shù)2)/它們的最大公約數(shù)代碼實(shí)現(xiàn)
#include<stdio.h> int main(void) {int a,b;int m,n;//m存放最大公約數(shù)n存放最小公共倍數(shù)int i=0;scanf("%d %d",&a,&b);if(a>=b){for(i=b;i>=1;i--){if( (a%i==0)&&(b%i==0) ){break;}}}else{for(i=a;i>=1;i--){if( (a%i==0)&&(b%i==0) ){break;}}}m=i;//最大公約數(shù)n=a*b/m;//最小公倍數(shù)printf("%d %d\n",m,n);return 0; } // 思路: 看兩個(gè)數(shù)哪個(gè)小,最大公約數(shù)一定小于等于那個(gè)小的數(shù)。 讓兩個(gè)數(shù)分別對那個(gè)小的數(shù)取余 當(dāng)兩個(gè)余數(shù)都為零時(shí)就找到了,如果不滿足,讓最小的數(shù)減1接著找。 //用輾轉(zhuǎn)相除法實(shí)現(xiàn) 它的時(shí)間復(fù)雜度比上面那一種低 #include<stdio.h> int main(void) {int a,b;int m,n;//m存放最大公約數(shù)n存放最小公共倍數(shù)int temp=0;int i=0;scanf("%d %d",&a,&b);n=a*b;if(a>=b){temp=a%b;while(temp){a=b;b=temp;temp=a%b;}m=b;//最大公約數(shù)}else{temp=b%a;while(temp){b=a;a=temp;temp=b%a;}m=a;//最大公約數(shù)}n=n/m;//最小公倍數(shù)printf("%d %d\n",m,n);return 0; }總結(jié)
- 上一篇: 【OJ】OJ的介绍和常用OJ推荐
- 下一篇: C语言易错题集 第四部