個人賽重開123題解

1題意

小晨的電腦上安裝了一個機器翻譯軟件,他經常用這個軟件來翻譯英語文章。
這個翻譯軟件的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟件會先在內存中查找這個單詞的中文含義,如果內存中有,軟件就會用它進行翻譯;如果內存中沒有,軟件就會在外存中的詞典內查找,查出單詞的中文含義然後翻譯,並將這個單詞和譯義放入內存,以備後續的查找和翻譯。
假設內存中有M 個單元,每單元能存放一個單詞和譯義。每當軟件將一個新單詞存入內存前,如果當前內存中已存入的單詞數不超過M−1,軟件會將新單詞存入一個未使用的內存單元;若內存中已存入M 個單詞,軟件會清空最早進入內存的那個單詞,騰出單元來,存放新單詞。
假設一篇英語文章的長度爲N 個單詞。給定這篇待譯文章,翻譯軟件需要去外存查找多少次詞典?假設在翻譯開始前,內存中沒有任何單詞。

Input
輸入共2 行。每行中兩個數之間用一個空格隔開。
第一行爲兩個正整數M 和N,代表內存容量和文章的長度。
第二行爲N 個非負整數,按照文章的順序,每個數(大小不超過1000)代表一個英文單詞。文章中兩個單詞是同一個單詞,當且僅當它們對應的非負整數相同。


剛剛弄完,差5分鐘;比賽結束了,機器翻譯沒有提交成功;  對於對列中數據的輸出輸入,刪除,初次見到,保存在這

#include<iostream> 

using namespace std;
 main()
{int a,b,c,s2[1000],d,j=-1,ss=1,k=0,i,s1=0,s[1000]={-1};
cin>>d>>a;
for(b=0;b<a;b++)
{cin>>s2[b];}


for(c=0;c<a;c++)
{for(i=k;i<=j;i++)
{if(s2[c]==s[i])
{ss=0;
break;}
}


if(ss)
{s[++j]=s2[c];
if(j-k+1>d)
k++;
s1++;}
ss=1;}

cout<<s1<<endl;

}

2--獎學金-----這道題看了代碼後,當時比賽時沒做出來,現在一看,哇,原來還可以這麼做,

我就重新敘述一遍題意,然後把這個很好的方法再描述一遍;

輸入n個同學的語文,數學,英語成績;學號爲1,2,。。n;

輸出5個同學的學號 總成績,(1,看總成績(從大到小)2,若總成績相同,看語文(從大到小)3,語文成績相同,看學號(從小到大);)

思路;直接把總成績,語文,學號放在一個數組裏,再比較大小,這種方法很巧,學以致用;

c 代碼

#include<stdio.h>
int s[301];
main()
{
    int a,b,c,d,e,k,t,i,j,x,s1;
    scanf("%d",&a);

    for(b=1; b<=a; b++)
    {
        scanf("%d %d %d",&c,&d,&e);
        t=c+d+e;
        k=a-b;
        s[b]=t*1000000+c*1000+k;
    }
    for(i=1; i<a; i++)
    {
        for(j=i+1; j<=a; j++)
           {

            if(s[i]<s[j])
            {
                s1=s[i];
                s[i]=s[j];
                s[j]=s1;
            }}
    }
    for(x=1; x<=5; x++)
    {
        printf("%d %d\n",a-s[x]%1000,s[x]/1000000);

    }}


3---題意

上體育課的時候,小蠻的老師經常帶着同學們一起做遊戲。這次,老師帶着同學們一起做傳球遊戲。

遊戲規則是這樣的:n個同學站成一個圓圈,其中的一個同學手裏拿着一個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的一個(左右任意),當老師在此吹哨子時,傳球停止,此時,拿着球沒有傳出去的那個同學就是敗者,要給大家表演一個節目。

聰明的小蠻提出一個有趣的問題:有多少種不同的傳球方法可以使得從小蠻手裏開始傳的球,傳了m次以後,又回到小蠻手裏。兩種傳球方法被視作不同的方法,當且僅當這兩種方法中,接到球的同學按接球順序組成的序列是不同的。比如有三個同學1號、2號、3號,並假設小蠻爲1號,球傳了3次回到小蠻手裏的方式有1->2->3->1和1->3->2->1,共2種。

 

Input

輸入共一行,有兩個用空格隔開的整數n,m(3<=n<=30,1<=m<=30)。

Output

輸出t共一行,有一個整數,表示符合題意的方法數。

 

 

#include<iostream>
using namespace std;
int main()
{int  ss[33][33]={0};
int a,b,c,d;
cin>>a>>b;
ss[0][0]=1;
for(c=1;c<=b;c++)
{for(d=0;d<a;d++)
{ss[c][d]=ss[c-1][(d-1+a)%a]+ss[c-1][(d+1)%a];
}}
cout<<ss[b][0]<<endl;
return 0;}
這道題理解後就感覺是遞歸;思考的時候一步一步往前推,實現的時候是從前後往後推

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章