蓝桥杯 2011年第二届C语言初赛试题(2)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                蓝桥杯 2011年第二届C语言初赛试题(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                6.?代碼填空?(滿分9分)
中獎計算
某抽獎活動的規則是:每位參與者在紙上寫下一個8位數的號碼。最后通過搖獎的辦法隨機產生一個8位數字。參與者寫下的數字中最多有多少個連續位與開獎號碼中的相同,則稱為中了幾個號。
例如:小張寫的數字是:12345678,而開獎號碼是:42347856。則稱小張中了3個號,因為其中最長的相同連續位是:“234”。如果小張寫的是:87654321,則他只中了一個號。
下面的代碼根據傳入的參數,返回中了幾個號。其中:a表示被評價的號碼,b表示搖號產生的數字。請填寫缺少的代碼。
int?g(int?a,?int?b)
{
char?sa[]="00000000";
char?sb[]="00000000";
int?n?=?0;
int?i,j;
?
sprintf(sa,"%8d",a);
sprintf(sb,"%8d",b);
for(i=0;?i<8;?i++)
{
for(j=1;?j<=8-i;?j++)
{
char?t?=?________;
sa[i+j]?=?0;
if(strstr(sb,?sa+i))
{
if(j>n)?_________;
}
sa[i+j]?=?t;
}
}
?
return?n;
}
代碼:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int g(int a,int b) {char sa[]="00000000";char sb[]="00000000";int n=0;int i,j;sprintf(sa,"%8d",a);sprintf(sb,"%8d",b);cout<<sa<<endl<<sb<<endl;for(i=0;i<8;i++){for(j=1;j<=8-i;j++){char t=sa[i+j];sa[i+j]=0;if(strstr(sb,sa+i)){if(j>n)n=j;}sa[i+j]=t;}}return n; } int main() {int a,b;a=12345678;b=42347856;cout<<g(a,b)<<endl; }思路:1、將a,b格式化存儲在字符串sa,sb中 2、sb為不變(目標)字符串,用兩層循環進行截取sa,i為起始位置,i+j為結尾,得到新字符串,將其與sa匹配,n記錄最大匹配的字符串長度。
總結
以上是生活随笔為你收集整理的蓝桥杯 2011年第二届C语言初赛试题(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: QQ空间说说的表情添加的代码
 - 下一篇: 蓝桥杯 2011年第二届C语言初赛试题(