Week3

A - 3:
Problem:

乘積尾零

如下的10行數(shù)據(jù),每行有10個(gè)整數(shù)恢口,請(qǐng)你求出它們的乘積的末尾有多少個(gè)零呆躲?

5650 4542 3554 473 946 4114 3871 9073 90 4329 
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899 
1486 5722 3135 1170 4014 5510 5120 729 2880 9019 
2049 698 4582 4346 4427 646 9742 7340 1230 7683 
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649 
6701 6645 1671 5978 2704 9926 295 3125 3878 6785 
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915 
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074 
689 5510 8243 6114 337 4096 8199 7313 3685 211 

注意:需要提交的是一個(gè)整數(shù),表示末尾零的個(gè)數(shù)忍抽。不要填寫任何多余內(nèi)容八孝。

Solution:

任何一個(gè)數(shù)都可以分解為若干個(gè)素?cái)?shù)的乘積
每個(gè)數(shù)分別對(duì)2, 5取余,并計(jì)算全部數(shù)可被2和5取余的次數(shù) 即可算出0的個(gè)數(shù)

Code:

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int countTwo = 0;
int countFive = 0;
void check(int num);
int main(void) {
    int data;
    int temp = 1;
    for (int i = 0; i < 100; i++) {
        cin >> data;
        check(data);
    }
    cout << min(countFive, countTwo);
    return 0;
}
void check(int num) {
    for (int i = 2; i <= 5; i++) {
            for (; num % i == 0;) {
                if (i == 2)
                    countTwo++;
                else if (i == 5)
                    countFive++;
                num /= i;
            }
        }
}

Ans

31

A - 4
Problem:

第幾個(gè)幸運(yùn)數(shù)

到x星球旅行的游客都被發(fā)給一個(gè)整數(shù),作為游客編號(hào)鸠项。
x星的國(guó)王有個(gè)怪癖干跛,他只喜歡數(shù)字3,5和7。
國(guó)王規(guī)定祟绊,游客的編號(hào)如果只含有因子:3,5,7,就可以獲得一份獎(jiǎng)品楼入。

我們來(lái)看前10個(gè)幸運(yùn)數(shù)字是:
3 5 7 9 15 21 25 27 35 45
因而第11個(gè)幸運(yùn)數(shù)字是:49

小明領(lǐng)到了一個(gè)幸運(yùn)數(shù)字 59084709587505,他去領(lǐng)獎(jiǎng)的時(shí)候牧抽,人家要求他準(zhǔn)確地說(shuō)出這是第幾個(gè)幸運(yùn)數(shù)字嘉熊,否則領(lǐng)不到獎(jiǎng)品。

請(qǐng)你幫小明計(jì)算一下扬舒,59084709587505是第幾個(gè)幸運(yùn)數(shù)字阐肤。

需要提交的是一個(gè)整數(shù),請(qǐng)不要填寫任何多余內(nèi)容讲坎。

Solution:

用篩法的思想 
數(shù)組預(yù)置數(shù)字 1 
對(duì)數(shù)組所有的數(shù) 不斷 * 3 把<=MAX 的數(shù)納入數(shù)組arr
對(duì)數(shù)組所有的數(shù) 不斷 * 5 把<=MAX 的數(shù)納入數(shù)組arr
對(duì)數(shù)組所有的數(shù) 不斷 * 7 把<=MAX 的數(shù)納入數(shù)組arr
ans = arr.size() - 1

Code:

long long MAXN = 59084709587505;
int main(void) {
    vector<long long> arr(1,1);
    int size;
    bool flag = false;
    int num[3] = { 3,5,7 };
    int step = 0;
    long long temp;
    for (int i = 0; i < 3; i++) {
        size = arr.size();
        for (int j = 0; j < size; j++) {
            for ( temp = arr[j] * num[i];temp<=MAXN;) {
                arr.push_back(temp);
                temp *= num[i];
            }
        }
    }
    cout << arr.size() - 1;
    return 0;
}

Ans

1905

A - 5
Problem:

打印圖形

如下的程序會(huì)在控制臺(tái)繪制分形圖(就是整體與局部自相似的圖形)孕惜。

當(dāng)n=1,2,3的時(shí)候,輸出如下:
請(qǐng)仔細(xì)分析程序衣赶,并填寫劃線部分缺少的代碼诊赊。

n=1時(shí):
 o 
ooo
 o 

n=2時(shí):
    o    
   ooo   
    o    
 o  o  o 
ooooooooo
 o  o  o 
    o    
   ooo   
    o    

n=3時(shí):
             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o             
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
 o  o  o  o  o  o  o  o  o 
ooooooooooooooooooooooooooo
 o  o  o  o  o  o  o  o  o 
    o        o        o    
   ooo      ooo      ooo   
    o        o        o    
             o             
            ooo            
             o             
          o  o  o          
         ooooooooo         
          o  o  o          
             o             
            ooo            
             o             

源程序:


#include <stdio.h>
#include <stdlib.h>

void show(char* buf, int w){
    int i,j;
    for(i=0; i<w; i++){
        for(j=0; j<w; j++){
            printf("%c", buf[i*w+j]==0? ' ' : 'o');
        }
        printf("\n");
    }
}

void draw(char* buf, int w, int x, int y, int size){
    if(size==1){
        buf[y*w+x] = 1;
        return;
    }
    
    int n = _________________________ ; //填空
    draw(buf, w, x, y, n);
    draw(buf, w, x-n, y ,n);
    draw(buf, w, x+n, y ,n);
    draw(buf, w, x, y-n ,n);
    draw(buf, w, x, y+n ,n);
}

int main()
{
    int N = 3;
    int t = 1;
    int i;
    for(i=0; i<N; i++) t *= 3;
    
    char* buf = (char*)malloc(t*t);
    for(i=0; i<t*t; i++) buf[i] = 0;
    
    draw(buf, t, t/2, t/2, t);
    show(buf, t);
    free(buf);
    
    return 0;
}


注意:只提交劃線部分缺少的代碼,不要抄寫任何已經(jīng)存在的代碼或符號(hào)府瞄。


Sulotion:

size = 為整個(gè)圖形的高
由題分析可知 N++
則size*=3

Ans:

int n = size / 3;

A - 8
Problem:

你有一張某海域NxN像素的照片碧磅,"."表示海洋碘箍、"#"表示陸地,如下所示:

.......
.##....
.##....
....##.
..####.
...###.
.......

其中"上下左右"四個(gè)方向上連在一起的一片陸地組成一座島嶼鲸郊。例如上圖就有2座島嶼丰榴。  

由于全球變暖導(dǎo)致了海面上升,科學(xué)家預(yù)測(cè)未來(lái)幾十年秆撮,島嶼邊緣一個(gè)像素的范圍會(huì)被海水淹沒(méi)四濒。具體來(lái)說(shuō)如果一塊陸地像素與海洋相鄰(上下左右四個(gè)相鄰像素中有海洋),它就會(huì)被淹沒(méi)职辨。  

例如上圖中的海域未來(lái)會(huì)變成如下樣子:

.......
.......
.......
.......
....#..
.......
.......

請(qǐng)你計(jì)算:依照科學(xué)家的預(yù)測(cè)盗蟆,照片中有多少島嶼會(huì)被完全淹沒(méi)。  
輸入
第一行包含一個(gè)整數(shù)N舒裤。  (1 <= N <= 1000)  
以下N行N列代表一張海域照片绢彤。  

照片保證第1行音念、第1列、第N行、第N列的像素都是海洋古程。 
輸出
一個(gè)整數(shù)表示答案供常。
樣例輸入
7 
.......
.##....
.##....
....##.
..####.
...###.
.......  
樣例輸出
1 

Solution:

DFS 數(shù)連通塊個(gè)數(shù) 并對(duì)可能會(huì)成為海洋的陸地進(jìn)行標(biāo)記并計(jì)數(shù) 再對(duì)原有陸地進(jìn)行計(jì)數(shù) 如果原有陸地個(gè)數(shù)和可能變成海洋的陸地個(gè)數(shù)相等 則該島嶼為沉沒(méi)島嶼
注意 有可能有些島嶼會(huì)因?yàn)樽兣兂蓛蓧K島嶼 所以通過(guò)變化前島嶼個(gè)數(shù)和變化后島嶼個(gè)數(shù)之差是不可行的
如果

Code:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
int N;
int count1 = 0;
int count2 = 0;
int dirX[4] = { -1, 0, 1, 0 };
int dirY[4] = { 0, -1, 0, 1 };
void dfs(vector<string > & MAP, vector<vector<bool> > &from, int x, int y);
int main(void) {
    int count = 0;
    cin >> N;
    string s;
    vector<bool> arr(N, 0);
    vector<vector<bool> > from(N, arr);
    vector<string > MAP;
    for (int i = 0; i < N; i++) {
        cin >> s;
        MAP.push_back(s);
    }
    for (int i = 1; i < N; i++) {
        for (int j = 1; j < N; j++) {
            if (MAP[i][j] == '#'&&from[i][j] == 0) {
                count1 = 0;
                count2 = 0;
                dfs(MAP, from, i, j);
                if (count1 == count2)
                    count++;
            }
        }
    }
    /*cout << endl;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cout << MAP[i][j];
        }
        cout << endl;
    }
    for (int i = 1; i < N; i++) {
        for (int j = 1; j < N; j++) {
            if (MAP[i][j] == '#'&&to[i][j] == 0) {
                dfs(MAP, to, i, j);
                count2++;
            }
        }
    }*/
    cout << count;
    return 0;
}
void dfs(vector<string > & MAP, vector<vector<bool> > &from, int x, int y) {
    from[x][y] = 1;
    count1++;
    int tempX;
    int tempY;
    for (int i = 0; i < 4; i++) {
        tempX = x + dirX[i];
        tempY = y + dirY[i];
        if(MAP[tempX][tempY]=='#' && from[tempX][tempY] == 0)
            dfs(MAP, from, tempX, tempY);
        if (MAP[tempX][tempY] == '.') {
            if (MAP[x][y] != '/')
                count2++;
            MAP[x][y] = '/';
            
            
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婴削,一起剝皮案震驚了整個(gè)濱河市锯梁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榜聂,老刑警劉巖搞疗,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異峻汉,居然都是意外死亡贴汪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門休吠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扳埂,“玉大人,你說(shuō)我怎么就攤上這事瘤礁⊙舳” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵柜思,是天一觀的道長(zhǎng)岩调。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赡盘,這世上最難降的妖魔是什么号枕? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮陨享,結(jié)果婚禮上葱淳,老公的妹妹穿的比我還像新娘钝腺。我一直安慰自己,他們只是感情好赞厕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布艳狐。 她就那樣靜靜地躺著,像睡著了一般皿桑。 火紅的嫁衣襯著肌膚如雪毫目。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天诲侮,我揣著相機(jī)與錄音镀虐,去河邊找鬼。 笑死浆西,一個(gè)胖子當(dāng)著我的面吹牛粉私,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播近零,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抄肖!你這毒婦竟也來(lái)了久信?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漓摩,失蹤者是張志新(化名)和其女友劉穎裙士,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體管毙,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腿椎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夭咬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啃炸。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卓舵,靈堂內(nèi)的尸體忽然破棺而出南用,到底是詐尸還是另有隱情,我是刑警寧澤掏湾,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布裹虫,位于F島的核電站,受9級(jí)特大地震影響融击,放射性物質(zhì)發(fā)生泄漏筑公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一尊浪、第九天 我趴在偏房一處隱蔽的房頂上張望匣屡。 院中可真熱鬧封救,春花似錦、人聲如沸耸采。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虾宇。三九已至搓彻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘱朽,已是汗流浹背旭贬。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搪泳,地道東北人稀轨。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岸军,于是被迫代替她去往敵國(guó)和親奋刽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351