總結一下所學的內容
文章目錄
前言
從跨進三大到現在,也有兩個多月的時間了。時間真的過得挺快的,下週就會進行的C語言分流考試了,雖然仗著高中學習過一部分語言知識目前學習起來壓力不是很大,但是還是寫一篇部落格來總結一下一些基礎的知識點和演算法吧,也算是給這一段時間在工作室的學習來一個總結吧
提示:以下是本篇文章正文內容,下面案例可供參考
一、一些基礎的題目和程式碼實現
1、輸出所有的三位水仙花數
題目:請輸出所有的水仙花數
樣例輸入:無
樣例輸出:153,370,371,407
方法一:分離每個數的個位十位百位
程式碼實現:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double ans = 0;
for(int i = 100;i<=999;i++){
int temp=i;
ans=0;
for(int j = 1;j<=3;j++){
ans=ans+pow(temp%10,3.0);
temp/=10;
}
if(ans == i) cout<<ans<<" ";
}
return 0;
}
方法二:三重迴圈來暴力模擬一個數的個位十位百位
程式碼實現:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double ans = 0;
for(int i = 1;i<=9;i++){
for(int j = 0;j<=9;j++){
for(int k = 0;k<=9;k++){
int temp=i*100+j*10+k;
if(temp == i*i*i+j*j*j+k*k*k)
cout<<temp<<" ";
}
}
}
return 0;
}
2、氣泡排序和選擇排序
題目:請使用氣泡排序和選擇排序分別對a,b兩個陣列進行排序
樣例輸入:輸入n代表每個陣列有多少個數,之後的兩行,每行n個數,表示輸入的資料
5
1 3 2 5 4
2 1 8 7 6
樣例輸出:
1 2 3 4 5
1 2 6 7 8
程式碼實現:
//選擇排序和氣泡排序
#include <iostream>
#define N 20
int a[N+1];
int b[N+1];
using namespace std;
void selectsort(int num1[],int n){
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
if(num1[i] < num1[j]){ //以第一個數為基準數 內迴圈迴圈一次就可以將一個最大數放到尾部
swap(num1[i],num1[j]);
}
}
}
}
void bubblesort(int num1[],int n){
for(int i = 1;i<=n-1;i++){
bool flag=false; //標記每一輪是否有發生交換
for(int j = 1;j<=n-i;j++){
if(num1[j] > num1[j+1]){
flag=true;
swap(num1[j],num1[j+1]);
}
}
if(!flag) break; //如果沒有發生交換 說明當前數列已經是有序的了 不再需要交換
}
}
int main(){
int n = 0;
cin>>n;
for(int i = 1;i<=n;i++)
cin>>a[i];
for(int i = 1;i<=n;i++)
cin>>b[i];
selectsort(b,n);
bubblesort(a,n);
cout<<"排序後的a陣列為:";
for(int i = 1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl<<"排序後的b陣列為:";
for(int i = 1;i<=n;i++){
cout<<b[i]<<" ";
}
}
3、求解n以內的所有素數
樣例輸入:5
樣例輸出:2 3 5
順便記錄一下篩選素數的方法:
①從2開始一直判斷到n-1
②從2開始判斷到sqrt(n)
③埃氏篩法
④尤拉篩法(利用最小質因子優化埃氏篩法)
程式碼實現:
//求解 n以內的所有素數
#include <iostream>
#include <cmath>
#include <cstring>
#define N 10000000
bool book1[N+1];
bool book2[N+1];
int a1[N+1];
int a2[N+1];
using namespace std;
void prime1(int n){
cout<<"不加任何優化的篩選:";
for(int i = 2;i<=n;i++){
bool flag=true;//預設為素數
for(int j = 2;j<i;j++){//從2篩選到i-1
if(i % j == 0){
flag=false;
break;
}
}
if(flag) cout<<i<<" ";
}
}
void prime2(int n){
cout<<"利用sqrt函式縮小篩選的範圍的篩法:" ;
for(int i = 2;i<=n;i++){
bool flag=true;//預設為素數
for(int j = 2;j<=sqrt(i);j++){//從2篩選到i-1
if(i % j == 0){
flag=false;
break;
}
}
if(flag) cout<<i<<" ";
}
}
void prime3(int n){
cout<<"埃氏篩素數法:";
for(int i = 2;i<=n;i++){
if(book1[i]){
a1[i]=i;
book1[i]=false;
for(int j = 2*i;j<=n;j+=i){
book1[j]=false;
}
}
}
for(int i = 2;i<=n;i++)
if(a1[i]) cout<<a1[i]<<" ";
}
void prime4(int n){
cout<<"尤拉篩法:";
for(int i = 2;i<=n;i++){
if(book2[i]){
a2[i]=i;
book2[i]=false;
for(int j = 2*i;j<=n;j+=i){
int k = 2;
book2[j]=false;
if(j % a2[k++] == 0) break;//尤拉篩法的核心思想
}
}
}
for(int i = 2;i<=n;i++)
if(a2[i]) cout<<a2[i]<<" ";
}
int main(){
memset(book1,true,sizeof(book1));
memset(book2,true,sizeof(book2));
int n = 0;
cin>>n;
prime1(n);
cout<<endl;
prime2(n);
cout<<endl;
prime3(n);
cout<<endl;
prime4(n);
cout<<endl;
}
4、求最大公約數和最小公倍數
題目:給定兩個數m,n,求他們的最大公約數和最小公倍數
樣例輸入:3,9
樣例輸出:3,9
數學知識:最大公約數乘以最小公倍數等於兩個數的乘積
程式碼實現:
//求兩個數的最大公約數和最小公倍數
//兩個數的乘積等於最大公約數乘以最小公倍數
#include <iostream>
using namespace std;
int gongyue(int n,int m){
int q;
while(1){
q=n%m;
if(q == 0) return m;
else{
n=m;
m=q;
}
}
}
int gongbei(int n,int m){
int temp=gongyue(n,m);
int temp2=n*m;
return temp2/temp;
}
int main(){
int n,m;
cin>>n>>m;
cout<<"最小公約數為:"<<gongyue(n,m)<<endl;
cout<<"最大公倍數為:"<<gongbei(n,m)<<endl;
}
5、對字串進行刪除所有指定字元的操作
題目:給定一段字串(可能包含空格)和一個字元,要求刪除這個字串中的所有給定的字元,如果該字串中不包含有此字元,輸出No Answer
樣例輸入:
love the world
o
樣例輸出:
lve the wrld
程式碼實現:
#include <iostream>
#include <cstring>
#include <cstdlib>
#define N 1000
char str[N+1];
bool book[N+1];
char word;
using namespace std;
int main(){
memset(book,true,sizeof(book));
int lenth = 0;
cin.getline(str,2000);
cin>>word;
lenth=strlen(str);
/*假刪除實現
for(int i = 0;i<lenth;i++)
if(word == str[i]) book[i]=false;
for(int i = 0;i<lenth;i++){
if(book[i]) cout<<str[i];
}*/
for(int i = 0;i<lenth;i++){
if(str[i] == word){
for(int j = i;j<lenth;j++)
str[j]=str[j+1];
lenth--;//避免訪問越界
}
}
str[lenth]='\0';//字串末尾置結束符
for(int i = 0;i<lenth;i++){
cout<<str[i];
}
system("pause");
return 0;
}
6、自定義函式交換兩個數的值
題目:給定兩個數m,n,編寫一個和swap有相同功能的函式
樣例輸入:5,3
樣例輸出:3,5
程式碼實現:
#include <iostream>
using namespace std;
void swap(int *m,int *n){
int temp=*m;
*m=*n;
*n=temp;
return;
}
int main(){
int m,n;
cin>>m>>n;
cout<<"交換前:"<<"m="<<m<<" "<<"n="<<n<<endl;
swap(&m,&n);
cout<<"交換後:"<<"m="<<m<<" "<<"n="<<n<<endl;
return 0;
}
7、行指標的使用
題目:無
樣例輸入:無
樣例輸出:無
程式碼實現:
//行指標的使用
#include <iostream>
#define N 10
using namespace std;
int main(){
int a[N+1][N+1];
int n = 0;
cin>>n;
int (*p)[N+1];//行指標中每行的個數這個引數要和被指向的二維陣列的每行的元素個數相同 不然會報錯
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
cin>>a[i][j];
p=a;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++)
cout<<*(*(p+i)+j)<<" ";
cout<<endl;
}
}
知識點:使用行指標指向某個二維陣列的時候需要保證每一行的個數和二維陣列每一行的個數相同,不然定義行指標的時候會報錯
總結
提示:這裡對文章進行總結:
例如:
相關文章
- Vue 插槽之插槽內容學習總結Vue
- 10.22 課程內容總結
- 總結一下最近的Go學習Go
- 9月10日 課程內容總結
- jquery實現改變所匹配的內容jQuery
- 8.1日CSP-J初賽內容總結
- 8.2日CSP-J初賽內容總結
- 8.3日CSP-J初賽內容總結
- Vue一個案例引發「內容分發slot」的最全總結Vue
- More-iOS開發中的音訊相關內容總結iOS音訊
- 11月2號(對Javaweb進行所學總結)JavaWeb
- 數學要背的內容
- 總結一下最近遇到的問題
- 待學習內容
- 已學習內容
- CSS學習內容CSS
- ? 看了 web.dev 的 631 篇部落格,我總結了這些內容Webdev
- 總結一下本週遇到的問題
- Linux檔案過濾及內容編輯處理命令總結!Linux
- SEO創業:做SEO的方向針對SEO創業內容的一個總結創業
- 學習內容介紹
- uniapp專案所遇問題總結APP
- 內網穿透的常用方法總結內網穿透
- HTTP 報文結構和內容HTTP
- python學習方法總結(內附python全套學習資料)Python
- WebBrowser採用MVVM繫結的方式更新內容WebMVVM
- Chap1.1資料結構的研究內容資料結構
- 工作總結ppt模板,瞭解一下!
- 使用Kimi+Markmap總結檔案內容生成思維導圖原創
- 『嗨威說』資料結構 - 第六章學習內容小結資料結構
- 044 內建指令總結
- idea替換內容快捷鍵 idea怎麼替換掉所選的文字Idea
- MongoDB的學習總結MongoDB
- docker的學習總結Docker
- 谷歌總是找不到想要的內容?學會這14個技巧,立馬就能找到谷歌
- 筆記整理:技術架構涵蓋內容和演變過程總結筆記架構
- 採購中的總擁有成本(TCO)包括哪些內容?
- 網站頁面內的內容結構怎樣佈局才合理?網站