2012蓝桥杯决赛题

时间:2022-09-09 23:30:18
【结果填空】 (满分5分)
1949年的国庆节(10月1日)是星期六。 
 今年(2012)的国庆节是星期一。
 那么,从建国到现在,有几次国庆节正好是星期日呢?

 只要答案,不限手段!

可以用windows日历,windows计算器,Excel公式,。。。。。

当然,也可以编程!

 不要求写出具体是哪些年,只要一个数目!

 千万不要提交源代码!
答案不要写在这里,写在“解答.txt”中
10       11       12
31       30       31
30 + 30 + 31
6 7 1 2 3 4 5
  1 2 3 4 5 6

7 8 9 10 11 

#include<iostream>
using namespace std;
#pragma warning(disable : 4996)

int month[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return true;
}
else
{
return false;
}
}

int main()
{
int days, ans, i, j;
days = 91;
ans = 0;
for (i = 1950; i <= 2013; i++)
{
if (check(i))
{
month[2] = 29;
for (j = 1; j <= 9; j++)
{
days += month[j];
}
days += 1;
if(days % 7 == 1)
{
ans++;
cout << "Year = " << i << endl;
}
days += month[10] + month[11] + month[12] - 1;
}
else
{
month[2] = 28;
for (j = 1; j <= 9; j++)
{
days += month[j];
}
days += 1;
if(days % 7 == 1)
{
ans++;
cout << "Year = " << i << endl;
}
days += month[10] + month[11] + month[12] - 1;
}
}
cout << "ans = " << ans << endl;
return 0;
}
Year = 1950
Year = 1961
Year = 1967
Year = 1972
Year = 1978
Year = 1989
Year = 1995
Year = 2000
Year = 2006
ans = 9
请按任意键继续. . .




【编程题】(满分19分)
    在很多软件中,输入拼音的首写字母就可以快速定位到某个词条。比如,在铁路售票软件中,输入: “bj”就可以定位到“北京”。怎样在自己的软件中实现这个功能呢?问题的关键在于:对每个汉字必须能计算出它的拼音首字母。
    GB2312汉字编码方式中,一级汉字的3755个是按照拼音顺序排列的。我们可以利用这个特征,对常用汉字求拼音首字母。
    GB2312编码方案对每个汉字采用两个字节表示。第一个字节为区号,第二个字节为区中的偏移号。为了能与已有的ASCII编码兼容(中西文混排),区号和偏移编号都从0xA1开始.
    我们只要找到拼音a,b,c,...x,y,z 每个字母所对应的GB2312编码的第一个汉字,就可以定位所有一级汉字的拼音首字母了(不考虑多音字的情况)。下面这个表给出了前述信息。请你利用该表编写程序,求出常用汉字的拼音首字母。
a 啊 B0A1
b 芭 B0C5
c 擦 B2C1
d 搭 B4EE
e 蛾 B6EA
f 发 B7A2
g 噶 B8C1
h 哈 B9FE
j 击 BBF7
k 喀 BFA6
l 垃 C0AC
m 妈 C2E8
n 拿 C4C3
o 哦 C5B6
p 啪 C5BE
q 期 C6DA
r 然 C8BB
s 撒 C8F6
t 塌 CBFA
w 挖 CDDA
x 昔 CEF4
y 压 D1B9
z 匝 D4D1
【输入、输出格式要求】
    用户先输入一个整数n (n<100),表示接下来将有n行文本。接着输入n行中文串(每个串不超过50个汉字)。
    程序则输出n行,每行内容为用户输入的对应行的汉字的拼音首字母。
    字母间不留空格,全部使用大写字母。
    例如:
    用户输入:
3
大家爱科学
北京*广场
软件大赛
    则程序输出:
DJAKX
BJTAMGC
RJDS

#include <iostream>
#include <string>
#include <vector>
using namespace std;
#pragma warning(disable : 4996)
vector<string>vec;
vector<char>dict;

void init()
{
vec.push_back("啊"); vec.push_back("芭"); vec.push_back("擦"); vec.push_back("搭");
vec.push_back("蛾"); vec.push_back("发"); vec.push_back("噶"); vec.push_back("哈");
vec.push_back("击"); vec.push_back("喀"); vec.push_back("垃"); vec.push_back("妈");
vec.push_back("拿"); vec.push_back("哦"); vec.push_back("啪"); vec.push_back("期");
vec.push_back("然"); vec.push_back("撒"); vec.push_back("塌"); vec.push_back("挖");
vec.push_back("昔"); vec.push_back("压"); vec.push_back("匝");
dict.push_back('A'); dict.push_back('B'); dict.push_back('C'); dict.push_back('D');
dict.push_back('E'); dict.push_back('F'); dict.push_back('G'); dict.push_back('H');
dict.push_back('J'); dict.push_back('K'); dict.push_back('L'); dict.push_back('M');
dict.push_back('N'); dict.push_back('O'); dict.push_back('P'); dict.push_back('Q');
dict.push_back('R'); dict.push_back('S'); dict.push_back('T'); dict.push_back('W');
dict.push_back('X'); dict.push_back('Y'); dict.push_back('Z');
}

void check(string word)
{
for(int i = 0; i < vec.size() - 1; i++)
{
if(word >= vec[i] && word < vec[i+1])
{
cout << dict[i];
break;
}
}
}

int main()
{
freopen("in.txt", "r", stdin);
string str, word;
init();
int n;
cin >> n;
while (n--)
{
cin >> str;
for (int i = 0; i < str.size(); i += 2)
{
word = str.substr(i, 2);
check(word);
}
cout << endl;
}
return 0;
}
【编程题】(满分27分)
脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。
DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。
为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):
1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT
2. 错码,例如把 AGGT 复制成了:AGCT
3. 重码,例如把 AGGT 复制成了:AAGGT
如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。
例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2
你的任务是:编写程序,找到两个DNA串的距离。
【输入、输出格式要求】
用户先输入整数n(n<100),表示接下来有2n行数据。
接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)
程序则输出n行,表示这n组DNA的距离。
例如:用户输入:
3
AGCTAAGGCCTT
AGCTAAGGCCT
AGCTAAGGCCTT
AGGCTAAGGCCTT
AGCTAAGGCCTT
AGCTTAAGGCTT


则程序应输出:
1
1
2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#pragma warning(disable : 4996)
using namespace std;
const int MAXN = 10005;

char dest[MAXN];
char str[MAXN];
int dp[MAXN][MAXN];

int DP(int x, int y)
{
int i, j;
for(i = 0; i <= x; i++)
dp[i][0] = i;
for(j = 0; j <= y; j++)
dp[0][j] = j;
for(i = 1; i <= x; i++)
{
for(j = 1; j <= y; j++)
{
if(dest[i-1] == str[j-1])
{
dp[i][j] = dp[i-1][j-1];
}
else
{
dp[i][j] = min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
}
}
}
return dp[x][y];
}

int main()
{
freopen("in.txt", "r", stdin);
int n;
cin >> n;
while (n--)
{
cin >> dest >> str;
int dest_len = strlen(dest);
int str_len = strlen(str);
cout << DP(dest_len,str_len) << endl;
}
return 0;
}