1. 程式人生 > 其它 >藍橋杯C/C++第三次培訓

藍橋杯C/C++第三次培訓

技術標籤:藍橋杯c語言c++

1.日期處理

在藍橋杯比賽中日期處理是經常考的題目是難點也是重點,但做出題目的方法有很多,Excel表格熟練的同學可以用Excel表格做出來,但用Excel表格做會花費很長時間才能做出來,而且不一定能作對,感覺很不划算,今天我們用C語言一起來解決它
1.1預備知識
1.1.1swap函式
swap函式是C++中algorithm標頭檔案下的函式,其作用是交換兩個數的值
swap(x,y)用來交換x,y,的值
程式碼示例

#include <stdio.h>
#include <iostream>
#include <queue>
#include <vector> #include <algorithm> using namespace std; int main() { int x,y; cin>>x>>y; swap(x,y); cout<<x<<" "<<y<<endl; return 0; }

一個n位整數x取後m位陣列成的數:x%pow(10,m),pow(a,b)表示a的b次方在math.c裡面,去前n-m位數:x/pow(10,n-m)
1.2取兩個日期之間相差的天數


思路解析
設兩個日期time1、time2,相差日期ans,time1在前,time2在後,具體處理:每當ans加1,time1加1,直到time1等於time2。
注意問題:

  1. 平年和閏年及判斷
  2. 當time1加一後的天數d等於當前月份天數加一時,d置為1,月份m加1,當m等於13時,m置為1,年份y加1

參考程式碼

#include <stdio.h>
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
using namespace std; int day[13][2]={0,0,31,31,28,29,31,31,30,30,31,31,30,30,31,31,31,31,30,30,31,31,30,30,31,31};//儲存每月的天數 bool judge(int x)//平年、閏年判斷 { if((x%4==0&&x%100!=0)||x%400==0) return true; return false; } int main() { int year1,year2,y1,y2,m1,m2,d1,d2; while(scanf("%d %d",&year1,&year2)!=EOF)//多組輸入 { if(year1>year2)//將日期設為year1<year2 { swap(year1,year2); } //分別取年、月、日 y1=year1/10000; m1=year1%10000/100; d1=year1%100; y2=year2/10000; m2=year2%10000/100; d2=year2%100; int ans=0;//設定相差天數為0,例2020/1/1與2020/1/2相差一天 while(y1<y2||m1<m2||d1<d2) { ans++;//相差天數加1 d1++; if(d1==day[m1][judge(y1)]+1)//當d1比當前月份天數大一天(天數滿足當前天數) { d1=1;//天置為1 m1++;//月份加1 } if(m1==13)//當過了12月 { m1=1;//月份置為1 y1++;//年份加1 } } cout<<ans<<endl; } }

2進位制轉換

在生活經常使用的是10進位制,而計算機當中經常使用二進位制,另外還有八進位制,十六進位制。他們之間的進位制轉換‘必須掌握
2.1將p進位制x轉為十進位制y
在這裡插入圖片描述
將其轉為10進位制y
在這裡插入圖片描述
程式碼演示

#include <stdio.h>
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
   int p,x;//p進位制數x 
   cin>>x>>p;
   int ans=0;//轉化為十進位制的結果 
   int y=1;//每位數乘的p的次方項p^0,p^1,p^2...p^n-1 
   while(x)
   {
   	  int a=x%10;//去x的每一位數 
		 x=x/10; 
		 ans+=a*y;
		 y=y*p; 
	} 
	cout<<ans<<endl;
   return 0;
}