閱讀338 返回首頁    go 阿裏雲 go 技術社區[雲棲]


2011藍橋杯【初賽試題】中獎計算

中獎計算

某抽獎活動的規則是:每位參與者在紙上寫下一個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;

}

 

 

首先要了解這兩個函數:sprintf與strstr

1>sprintf

sprintf
字串格式化命令,主要功能是把格式化的數據寫入某個字符串中。sprintf 是個變參函數。

功能

把格式化的數據寫入某個字符串緩衝區。
頭文件

stdio.h
原型

int sprintf( char *buffer, const char *format, [ argument] … );

參數列表

buffer:char型指針,指向將要寫入的字符串的緩衝區。
format:格式化字符串。
[argument]...:可選參數,可以是任何類型的數據。
返回值:字符串長度(strlen)

/*例子*/

#include <stdio.h>//某個頭文件
int main ()/*主函數“整數”類型*/
{
      char buffer [50];/*“字符”類型的數組,下麵共有50個元素。*/
      int n, a=5, b=3;/*三個變量都為“整數”類型*/
      n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);/*賦予數值*/
      printf ("[%s] is a string %d chars long\n",buffer,n);/*“格式輸出”*/
 
      return 0;/*“返回 零”
      也就是程序正常退出*/
}

輸出結果:
[5 plus 3 is 8] is a string 13 chars long

 

2>strstr

包含文件:string.h
函數名: strstr
函數原型:extern char *strstr(char *str1, char *str2);
功能:從字符串str1中查找是否有字符串str2,如果有,從str1中的str2位置起,返回str1中str2起始位置的指針,如果沒有,返回null。
返回值:返回該位置的指針,如找不到,返回空指針。
例子:
char str[]="1234 xyz";
char* str1=strstr(str,"34");
cout<<str1<<endl;

顯示:    34 xyz

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];//為了設置結束標簽之後好還原sa[i+j]

sa[i+j] = 0;//設置結束標簽(我認為應該是'\0')

if(strstr(sb, sa+i))//從i一直對比到i+j

{

if(j>n) n=j;//如果出現比上一次記錄的最長連續相等序列還長,就替換掉它

}

sa[i+j] = t;//把sa[i+j]還原回來

}

}

return n;

}



 

 

 

 

最後更新:2017-04-03 12:55:32

  上一篇:go 關於mongodb按照字段模煳查詢方法
  下一篇:go Android逆向分析(反編譯)工具ded的使用