亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

算法競賽入門經典習題 第三章

2019-11-11 04:55:04
字體:
來源:轉載
供稿:網友

算法競賽入門經典習題  第三章

在下面的習題中,前一半的題目幾乎只需要“按照題目說的做”,但后面的題目需要一些思考甚至靈感。

為了保證學習效果,請至少獨立完成8道習題。 

習題3-1得分(Score, ACM/ICPC SEOul 2005, UVa1585)

給出一個由O和X組成的串(長度為1~80),統計得分。

每個O的得分為目前連續出現的O的個數,X的得分為0。 

例如,OOXXOXXOOO的得分為1+2+0+0+1+0+0+1+2+3。

//輸入字符串判斷X與O然后處理得分。

//如果為X則重置為0,否則一直加1,每次將得到分值相加。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){    int t;    char s[200];    int kase = 0;    scanf("%d", &t);    while (t--)    {        int score = 0, sum = 0;        scanf("%s", s);        int l = strlen(s);        for (int i = 0; i < l; i++)        {            if (s[i] == 'X')                score = 0;            if (s[i] == 'O')                score++;            sum += score;        }        PRintf("%d/n", sum);    }    return 0;}

#include <cstdio>#include <cstring>const int maxn = 150;int main(){    char s[maxn];    int t, kase = 0;    scanf("%d", &t);    while (t--)    {        int num = 0, score = 0;        scanf("%s", s);        int l = strlen(s);        for (int i = 0; i < l; i++)        {            if (s[i] == 'O')            {                num++;                score += num;            }            else                num = 0;        }        printf("%d/n", score);    }    return 0;}

習題3-2分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

給出一種物質的分子式(不帶括號),求分子量。 

本題中的分子式只包含4種原子,分別為C, H, O, N,原子量分別為12.01, 1.008, 16.00, 14.01(單位:g/mol)。 

例如,C6H5OH的分子量為94.108g/mol。 

【解題思路分析】

1. 建立字母到數值(原子量)的映射數組。 2. 原子后面數值可能為多位數,一直往后判斷,直到不是數字,i值自增。 3. 碰到字母直接加原子量;碰到數字用(數字-1)乘以原子量。

#include <iostream>#include <cstring>#include <cstdio>#include <cctype>const double m[] = {0, 0, 12.01, 0, 0, 0, 0, 1.008, 0, 0, 0, 0, 0, 14.01, 16.00};int main(){    char s[150];    int t;    scanf("%d", &t);    while (t--)    {        memset(s, '0', sizeof(s));        double sum = 0;        scanf("%s", s);        char ch = s[0];        int l = strlen(s), n;        for(int i = 0; i < l; i++)        {            if (isalpha(s[i]))            {                ch = s[i];                sum += m[ch - 'A'];            }            else            {                n = s[i] - '0';                if (isdigit(s[i+1]))                {                    n = n*10 + (s[i+1] - '0');                    i++;                }                sum += m[ch - 'A'] * (n - 1);            }        }        printf("%.3lf/n", sum);    }    return 0;}----------------------其他方法------------------------

#include<stdio.h>#include<string.h>#include<ctype.h>//int isdigit(int,char)需要的頭文件#define MAX 20double getWeight(char c){    double w = 0;    switch (c) {        case 'c':        case 'C': w = 12.01;break;        case 'h':        case 'H': w = 1.008;break;        case 'o':        case 'O': w = 16.00;break;        case 'n':        case 'N': w = 14.01;break;    }    return w;}int main() {    char str[MAX];    scanf("%s", str);    if(isdigit(str[0])){//isdigit判斷字符是不是數字        printf("輸入格式錯誤!/n");        return 0;    }    double weight = 0;    double sum = 0;    for (int i=0; i<strlen(str);i++){        int num = 1;        for(int pre=0; isdigit(str[i]);i++){            num = pre*10+str[i]-'0';            pre = num;        }        sum += num * weight;   //weight = str[i-1]'s weight        if(i<strlen(str)) weight = getWeight(str[i]);  //weight = str[i]'s weight    }    sum += weight;//加上最后一次循環的原子量    printf("分子量為:%.3lfg/mol/n", sum);    return 0;}

習題3-3數數字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)

把前n(n≤10000)個整數順次寫在一起:123456789101112…數一數0~9各出現多少次

(輸出10個整數,分別是0,1,…,9出現的次數)。

注意:  數個數時別漏0,且從1開始數。

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int main(){    int t;    scanf("%d", &t);    while (t--)    {        int n, x;        scanf("%d", &n);        int a[10];        memset(a, 0, sizeof(a));        for (int i = 1; i <= n; i++)        {            x = i;            while (x)            {                a[x%10]++;                x /= 10;            }        }        printf("%d", a[0]);        for (int i = 1; i < 10; i++)            printf(" %d", a[i]);        printf("/n");    }    return 0;}注:本題可參考-騎金剛跨長城-解題過程,因崔思婷。

習題3-4周期串(Periodic Strings, UVa455)

如果一個字符串可以由某個長度為k的字符串重復多次得到,則稱該串以k為周期。

例如,abcabcabcabc以3為周期(注意,它也以6和12為周期)。

輸入一個長度不超過80的字符串,輸出其最小周期。

【解題思路分析】

1.如果i為最小周期,那么字符串長度必定是i的整數倍

2.再判斷i是否為周期。

#include <cstdio>#include <cstring>const int maxn = 82;int main(){    char s[maxn];    int t;    scanf("%d", &t);    while (t--)    {        memset(s, '0', sizeof(s));        scanf("%s", s);        int m = strlen(s);        for (int i = 1; i < m; i++)        {            if (m % i == 0)            {                bool f = true;                for (int j = i; j < 2*i; j++)                {                    if (s[j - i] != s[j])                        f = false;                }                if (f)                {                    printf("%d/n", i);                    break;                }            }        }    }    return 0;}

注意:類似abcdeabcabcdeabcabcdeabcabcdeabcabcdeabc的判斷以及最小周期。

To Be Continued.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品第100页| 北条麻妃一区二区在线观看| 国产成人a亚洲精品| 国产精品国产三级国产aⅴ9色| 国产精品都在这里| 国产精品久久一区| 国产成人久久久| 亚洲网站视频福利| 久久久久久久国产精品视频| 日韩精品视频免费专区在线播放| 日韩成人免费视频| 亚洲色图15p| 久久天天躁狠狠躁老女人| 欧美激情a∨在线视频播放| 日韩亚洲欧美中文在线| 精品国产乱码久久久久久天美| 中文字幕免费精品一区高清| 国产精品国产三级国产aⅴ9色| 久久精品人人做人人爽| 中文字幕日韩在线视频| 91产国在线观看动作片喷水| 国产日韩欧美影视| 人人澡人人澡人人看欧美| 欧美一性一乱一交一视频| 欧美另类交人妖| 日韩欧美极品在线观看| 色婷婷综合成人av| 欧美性猛交99久久久久99按摩| 国产免费久久av| 日韩av在线网| 国产精品揄拍一区二区| 日韩国产一区三区| 欧美精品午夜视频| 国产精品www网站| 国产激情久久久久| 九九热在线精品视频| 亚洲va久久久噜噜噜| 亚洲精品国产综合区久久久久久久| 国产性色av一区二区| 国产美女精品视频免费观看| 国产精品jvid在线观看蜜臀| 国产一区二区视频在线观看| 日韩精品免费看| 97久久精品人搡人人玩| 国产丝袜一区二区| 午夜精品一区二区三区在线播放| 亚洲免费视频在线观看| 亚洲欧洲日产国码av系列天堂| 国内精品国产三级国产在线专| 精品久久久久久中文字幕一区奶水| 国产综合在线看| 久久久国产一区二区| 欧美一区二区三区图| 欧美国产日韩一区二区三区| 欧美激情亚洲一区| 亚洲精品99久久久久| 亚洲xxx大片| 久99久在线视频| 色综合伊人色综合网| 97精品国产aⅴ7777| 国产精品日韩一区| 国产97人人超碰caoprom| 日韩av免费在线观看| 一区三区二区视频| 国产视频在线观看一区二区| 欧美激情一区二区三区久久久| 日韩av在线免费| 色综合天天狠天天透天天伊人| 日韩在线免费av| 九九久久久久99精品| 国产欧美精品久久久| 欧美丰满老妇厨房牲生活| 久久久亚洲成人| 奇米成人av国产一区二区三区| 国产日韩亚洲欧美| 亚洲一区二区国产| 亚洲电影在线观看| 亚洲第一区第一页| 日本成人激情视频| 久久色免费在线视频| 亚洲成人av在线播放| 一区二区三区黄色| 国产精品免费观看在线| 久久偷看各类女兵18女厕嘘嘘| 91高清视频免费观看| 亚洲的天堂在线中文字幕| 国产亚洲精品久久久久久| 精品久久久久久久久久| 国产日韩av在线| 日韩视频在线免费观看| 国产伦精品一区二区三区精品视频| 狠狠色噜噜狠狠狠狠97| 91精品久久久久久久久久另类| 国产91精品久久久久久| 亚州成人av在线| 97涩涩爰在线观看亚洲| 日韩欧美在线视频| 久久久亚洲福利精品午夜| 国产一区二区三区网站| 亚洲精品在线看| 色www亚洲国产张柏芝| 午夜精品一区二区三区在线播放| 欧美激情视频网址| 亚洲综合日韩中文字幕v在线| 国产精品嫩草影院久久久| 国产精品普通话| 日韩视频欧美视频| 亚洲免费一在线| 国产一区视频在线| 狠狠久久亚洲欧美专区| 欧美在线观看网址综合| 久久99热精品这里久久精品| 亚洲女人被黑人巨大进入al| 永久免费毛片在线播放不卡| 免费97视频在线精品国自产拍| 欧美色欧美亚洲高清在线视频| 亚洲欧美在线免费观看| 91精品视频播放| 国产69精品久久久久9999| 91日本在线观看| 日韩中文字幕精品视频| 亚洲美女av网站| 91禁国产网站| 亚洲精品久久久久久久久久久久久| 在线播放国产一区二区三区| xvideos亚洲| 色婷婷av一区二区三区在线观看| 亚洲第一av网站| 国产国语刺激对白av不卡| 亚洲免费中文字幕| 久久精品成人一区二区三区| 国产精品福利小视频| 欧美日韩中文字幕在线视频| 日韩精品在线观看一区二区| 日韩在线观看免费高清完整版| 伊人av综合网| 亚洲国产一区二区三区四区| 日韩精品免费看| 久久久av一区| 亚洲在线视频观看| 91社影院在线观看| 啪一啪鲁一鲁2019在线视频| 国产成人在线精品| 日韩精品免费在线视频观看| 亚洲成人av在线播放| 亚洲国产精品久久精品怡红院| 亚洲国产古装精品网站| 亚洲视频在线播放| 久久精品国产99国产精品澳门| 国产精品福利网| 国产日韩欧美一二三区| 日韩免费不卡av| 日韩www在线| 97香蕉超级碰碰久久免费软件| 色综合久久悠悠| 国产精品69久久| 亚洲香蕉av在线一区二区三区| 91黑丝在线观看| 国产亚洲精品91在线| 欧美中文在线观看| 一区二区在线免费视频| 久久亚洲一区二区三区四区五区高| 日本免费久久高清视频| 日韩美女免费视频|