A 各數(shù)字之和
題目描述
思路:一開(kāi)始想的是回溯算法,后來(lái)想到暴力也不會(huì)超時(shí)就用的暴力
代碼
#include <iostream>
using namespace std;
int n;
int cnt;
int sum;
bool check(int k){
sum = 0;
while(k){
if(sum > 9)
return false;
sum += k % 10;
k /= 10;
}
if(sum == 9)
return true;
return false;
}
int main(){
cin>>n;
for(int i = 9;i<=n;i++){
if(check(i)){
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
B 直角三角形
題目描述
思路:暴力枚舉
#include <iostream>
#include <cmath>
using namespace std;
int a,b,c;
int main(){
cin>>c;
int s = c * c;
for(int a = 1; a * a * 2 <= s;a++){
b = sqrt(s - a * a);
if(b * b + a * a == c * c){
cout<<a<<" "<<b<<endl;
return 0;
}
}
return 0;
}
C 單位轉(zhuǎn)換
題目描述
思路:字符串分離操作
代碼
#include <stdio.h>
#include <string.h>
double p[15];
char str[20];
double res, t;
int main(){
p[0] = 1;
p[9] = 1024;
p[11] = 1024 * 1024;
p[5] = 1024 * 1024 * 1024;
scanf("%s",str);
int i = 0;
int len = strlen(str);
while(str[i] >= '0' && str[i] <= '9') res = res * 10 + (str[i] - '0'), i++;
char c = str[i];
char c2;
if(str[len - 2] >= 'A' && str[len - 2] <= 'Z')
c2 = str[len- 2];
else
c2 = str[len - 1];
res *= p[c - 'B']; //轉(zhuǎn)換為B;
res /= (p[c2 - 'B']) * 1.0;
printf("%.6f",res);
return 0;
}
D 評(píng)委打分
題目描述
思路:題目說(shuō)的很清楚
#include <stdio.h>
#include <string.h>
double avg;
int n, sum, num;
int max_value, min_value;
int max(int a, int b){
return a > b ? a : b;
}
int min(int a, int b){
return a < b ? a : b;
}
int main(){
max_value = 0;
min_value = 100;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&num);
sum += num;
max_value = max(max_value,num);
min_value = min(min_value,num);
if(i >= 2){
sum = sum - max_value - min_value;
avg = sum / ((i - 1) * 1.0);
printf("%.2f\n",avg);
sum = sum + max_value + min_value;
}
}
return 0;
}
E 儒略歷
題目描述
在 1582 年之前帝雇,以 4 為倍數(shù)的年份為閏年辕漂。正常情況下拟糕,一年中一月到十二月的天數(shù)分別是 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 天注祖。如果這年是閏年谓厘,那么二月則有 29 天财剖。
但某位皇帝發(fā)現(xiàn)這么做其實(shí)不夠準(zhǔn)確悠夯,會(huì)造成誤差,因此規(guī)定從 1582 年開(kāi)始躺坟,以 4 為倍數(shù)的年份沦补,除了以 100 為倍數(shù)且不為 400 的倍數(shù)年份,才是閏年咪橙。同時(shí)為了消除誤差夕膀,規(guī)定 1582 年 10 月 4 日的下一天是 1582 年 10 月 15 日,中間的日期就當(dāng)作不存在了美侦。
現(xiàn)在給出日期产舞,計(jì)算這個(gè)日期到公元 1 年 1 月 1 日經(jīng)過(guò)的天數(shù)。
這道題目讀了挺久才看懂菠剩,意思大概是:在1582年之前判斷閏年是i % 4 == 0
就行易猫,而在之后,判斷閏年(i % 4 == 0 && i % 100 != 0) || i % 400 == 0
,而1582年10.15已及以后都要減去10天
思路:直接先枚舉 i - 1
年之前判斷是否為閏年具壮,確定加365還是366准颓,而第i
年就直接枚舉月份哈蝇,最后加上尾巴上的天數(shù),然后如果是1582年要特判是否減10
代碼
#include <iostream>
#include <map>
#include <string>
using namespace std;
int month1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int month2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
string str;
int year, month, day;
int res;
map<string,int> mp;
int main(){
mp["JAN"] = 1;
mp["FEB"] = 2;
mp["MAR"] = 3;
mp["APR"] = 4;
mp["MAY"] = 5;
mp["JUN"] = 6;
mp["JUL"] = 7;
mp["AUG"] = 8;
mp["SEP"] = 9;
mp["OCT"] = 10;
mp["NOV"] = 11;
mp["DEC"] = 12;
cin>>str;
int i = 0;
while(str[i] >= '0' && str[i] <= '9') day = day * 10 + (str[i] - '0'),i++;
string str1 = str.substr(i,3);
month = mp[str1];
i += 3;
while(i < str.size()) year = year * 10 + (str[i] - '0'),i++;
for(int i = 1; i < year;i++){
if(i < 1582 ){
if(i % 4 == 0)
res += 366;
else
res += 365;
}else{
if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
res += 366;
else
res += 365;
}
if(i == 1582){
res -= 10;
}
}
if(year < 1582){
if(year % 4 == 0){
for(int i = 0;i < month - 1 ;i++)
res += month1[i];
}else{
for(int i = 0;i < month - 1 ;i++)
res += month2[i];
}
}else{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
for(int i = 0;i < month - 1 ;i++)
res += month1[i];
}else{
for(int i = 0;i < month - 1 ;i++)
res += month2[i];
}
}
res += day;
if(year == 1582 && ((month == 10 && day >= 15) || month >= 11)){
res -= 10;
}
cout<<res - 1<<endl;
return 0;
}