2012藍橋杯

密碼發生器ios

在對銀行帳戶等重要權限設置密碼的時候,咱們經常遇到這樣的煩惱:若是爲了好記用生日吧,容易被破解,不安全;若是設置很差記的密碼,又擔憂本身也會忘記;若是寫在紙上,擔憂紙張被別人發現或弄丟了...c++

這個程序的任務就是把一串拼音字母轉換爲6位數字(密碼)。咱們可使用任何好記的拼音串(好比名字,王喜明,就寫:wangximing)做爲輸入,程序輸出6位數字。編程

變換的過程以下:安全

第一步把字符串6個一組摺疊起來,好比wangximing則變爲:函數

wangxispa

ming操作系統

第二步把全部垂直在同一個位置的字符的ascii碼值相加,得出6個數字,如上面的例子,則得出:調試

228 202 220 206 120 105code

第三步再把每一個數字「縮位」處理:就是把每一個位的數字相加,得出的數字若是不是一位數字,就再縮位,直到變成一位數字爲止。例如: 228 => 2+2+8=12 => 1+2=3blog

上面的數字縮位後變爲:344836, 這就是程序最終的輸出結果!

要求程序從標準輸入接收數據,在標準輸出上輸出結果。

輸入格式爲:第一行是一個整數n<100),表示下邊有多少輸入行,接下來是n行字符串,就是等待變換的字符串。

輸出格式爲:n行變換後的6位密碼。

例如,輸入:

5

zhangfeng

wangximing

jiujingfazi

woaibeijingtiananmen

haohaoxuexi

則輸出:

772243

344836

297332

716652

875843

題解:

雖然不知道對錯,但感受還好;

代碼:

#include <cstdio>
#include <iostream>
#include<string.h>
using namespace std;
int ps[6];
char str[110];
int main(){
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%s",str);
        memset(ps,0,sizeof(ps));
        for(int i=0;str[i];i++){
            ps[i%6]+=str[i];
        }
        for(int i=0;i<6;i++){
            int temp;
            while(ps[i]>9){
                temp=0;
                while(ps[i]){
                    temp+=ps[i]%10;
                    ps[i]/=10;
                }
                ps[i]=temp;
            }
        }
        for(int i=0;i<6;i++)printf("%d",ps[i]);puts("");
    }
    return 0;
}

 

奪冠機率

足球比賽具備必定程度的偶然性,弱隊也有打敗強隊的可能。

假設有甲、乙、丙、丁四個球隊。根據他們過去比賽的成績,得出每一個隊與另外一個隊對陣時取勝的機率表:

      甲    乙    丙    丁

甲     -    0.1  0.3  0.5

乙    0.9   -    0.7  0.4

丙    0.7  0.3   -    0.2

丁    0.5  0.6  0.8    -

數據含義:甲對乙的取勝機率爲0.1,丙對乙的勝率爲0.3...

如今要舉行一次錦標賽。雙方抽籤,分兩個組比,獲勝的兩個隊再爭奪冠軍。(參見【1.jpg】)

請你進行10萬次模擬,計算出甲隊奪冠的機率。

注意:

請仔細調試!您的程序只有能運行出正確結果的時候纔有機會得分!

在評卷時使用的輸入數據與試卷中給出的實例數據多是不一樣的。

請把全部函數寫在同一個文件中,調試好後,存入與【考生文件夾】下對應題號的「解答.txt」中便可。

相關的工程文件不要拷入。

源代碼中不能能使用諸如繪圖、Win32API、中斷調用、硬件操做或與操做系統相關的API

容許使用STL類庫,但不能使用MFCATL等非ANSI c++標準的類庫。例如,不能使用CString類型(屬於MFC類庫)。

題解:分別考慮對戰狀況;求機率和除以次數便可;

代碼:

 

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

int main(){
    double t[3];
    t[0]=0.1*0.3*0.2+0.1*0.5*0.8;
    t[1]=0.3*0.5*0.6+0.3*0.1*0.4;
    t[2]=0.5*0.3*0.3+0.5*0.1*0.7;
    srand(time(0));
    double ans=0;
    for(int i=1;i<=100000;i++){
        int x=rand()%3;
        ans+=t[x];
    }
    printf("%lf\n",ans/100000);
    return 0;
}

 

取球遊戲

今盒子裏有n個小球,AB兩人輪流從盒中取球,每一個人均可以看到另外一我的取了多少個,也能夠看到盒中還剩下多少個,而且兩人都很聰明,不會作出錯誤的判斷。

咱們約定:

每一個人從盒子中取出的球的數目必須是:137或者8個。

輪到某一方取球時不能棄權!

A先取球,而後雙方交替取球,直到取完。

被迫拿到最後一個球的一方爲負方(輸方)

請編程肯定出在雙方都不判斷失誤的狀況下,對於特定的初始球數,A是否能贏?

程序運行時,從標準輸入得到數據,其格式以下:

先是一個整數n(n<100),表示接下來有n個整數。而後是n個整數,每一個佔一行(整數<10000),表示初始球數。

程序則輸出n行,表示A的輸贏狀況(輸爲0,贏爲1)。

例如,用戶輸入:

10

18

則程序應該輸出:

0

1

1

0

題解:從必敗點找必勝點就好;

代碼:

#include<stdio.h>
const int MAXN=10010;
int step[4]={1,3,7,8};
int a[MAXN];
int main(){
    a[1]=0;
    for(int i=1;i<MAXN;i++){
        if(!a[i])
        for(int j=0;j<4;j++){
            a[i+step[j]]=1;
        }
    }
    int T;
    scanf("%d",&T);
    while(T--){
        int x;
        scanf("%d",&x);
        printf("%d\n",a[x]);
    }
    return 0;
}
相關文章
相關標籤/搜索