亚洲v欧美v国产v在线成_制服丝袜中文字幕丝袜专区_一区二区三区韩国电影_激情欧美一区二区中文字幕

c++ 一些筆試題

  關(guān)于c++;筆試題,希望對(duì)你有所幫助!

  #include

  #include

  #include

  using namespace std;

  //奶牛生子:一只幼年奶牛第4年可生下第一只奶牛 以后每年生一只

  //現(xiàn)有一只幼年奶牛 20年后 共有多少只奶牛

  int CowNum(int size)

  {

  int* year = new int[size];

  memset(year, 0, size*sizeof(int));

  year[0] = 1;

  int count = 0;

  for (int i = 0; i < size; ++i)

  {

  if (i >= 4-1 )

  {

  year[i] = year[i - 1] + year[i - 3];

  }

  }

  for (int i = 0; i < size; ++i)

  count += year[i];

  return count;

  delete year;

  }

  int CowNum1(int year)

  {

  int newCow1 = 1;//1歲 牛 開始有1只

  int newCow2 = 0;//2歲 牛

  int newCow3 = 0;//三歲 牛

  int newCow4 = 0;//四歲 牛 成年牛

  //int newCow5 = 0;//將題意理解成第5年牛開始生 則加個(gè)5歲牛數(shù)量

  int oldCow = 0;//可生崽 牛

  int count = 0; //總數(shù)

  for (int yearcnt = 2; yearcnt <= year; ++yearcnt)//默認(rèn)牛是1歲 第一次進(jìn)去牛 2歲

  {

  //newCow5 = newCow4;

  newCow4 = newCow3; //3歲牛長(zhǎng) 4歲

  oldCow += newCow4;

  newCow3 = newCow2;

  newCow2 = newCow1;//一歲牛 長(zhǎng)2歲

  newCow1 = oldCow;//1歲牛 為可生崽牛 的數(shù)量

  count = oldCow + newCow1+newCow2+newCow3;//總數(shù)為 成年牛 + 1 2 3歲牛

  //count = oldCow + newCow1 + newCow2 + newCow3+newCow4; //如果是5歲開始生

  //總數(shù)為 成年牛 + 1 2 3 4歲牛

  }

  return count;

  }

  //一串珠子 有M<=10種顏色 n顆 求最小的含所有顏色的子串

  //邏輯復(fù)雜的一道題

  void AllColorBead(char* bead, int colorNum)//bead 珠子串 colorNum 顏色數(shù)

  {

  char* head,* str=bead; //head 最短子串頭 str 循環(huán)變量

  int clrNum = 0 ,beadCnt=0,tmpCnt=1000000,tmpClrNum=-1;

  char colorArr[128] = { 0 };//用來判斷每種顏色是否第一次出現(xiàn) 來區(qū)分顏色數(shù)是否+1

  while (*str!=‘\0‘)

  {

  if (*(str + 1) != *str) //如果相連的顏色一樣直接跳過

  {

  char* tmp = str; //記錄str 如果該子串滿足要求 head=str

  while ((*tmp)!=‘\0‘)

  {

  if (colorArr[*tmp] == 0)//顏色第一次出現(xiàn) clrNum++

  {

  ++clrNum;

  ++colorArr[*tmp];

  }

  //if (clrNum == colorNum) //告訴珠子顏色數(shù)邏輯

  //{

  // if (tmpCnt > beadCnt)//如果該子串滿足要求 head = str 跳出循環(huán)

  // {

  // tmpCnt = beadCnt;

  // head = str;

  // }

  // break;

  //}

  if (tmpClrNum==clrNum)//不告訴珠子顏色數(shù) 第一次需完全遍歷 求出顏色數(shù)

  break;

  ++beadCnt;

  ++tmp;

  }

  if (tmpCnt > beadCnt&&clrNum>=tmpClrNum)//如果該子串滿足要求 head = str 跳出循環(huán)

  {

  tmpCnt = beadCnt;

  tmpClrNum = clrNum;//不告訴珠子顏色數(shù)需加條件

  head = str;

  }

  clrNum = 0; //每次檢索子串結(jié)束 計(jì)數(shù)器制零

  beadCnt = 0;

  memset(colorArr, 0, 128 * sizeof(char));

  }

  str++; //跳刀下一個(gè)子串

  }

  for (int i = 0; i <= tmpCnt; ++i)//輸出子串

  cout << *(head + i);

  cout << endl;

  }

  //n*n的 回字形 蛇形 數(shù)組 按行輸出

  // eg: n=3

  // 1 2 3

  // 8 9 4

  // 7 6 5

  void SnakeArr(int n)

  {

  int* arr = new int[n*n]; //儲(chǔ)存數(shù)組

  int type = 0;//寫入數(shù)組類型 0 從左向右 1 從上往下 2 從右往左 3從下往上

  int num = 1;//輸入數(shù)組值 1---n*n

  int gap = 0;//每行輸出跨度

  int i = 0, j = 0;//數(shù)組下標(biāo)

  while (num <= n*n)//num自加到n*n時(shí)說明 全填滿了 結(jié)束循環(huán)

  {

  if (type == 0)//從左向右 寫入數(shù)組

  {

  for (int index = i + gap; i < n - gap&&num <= n*n; ++i)

  arr[i+j*n] = num++;

  ++type;//橫行寫入數(shù)組完成 類型+1 變豎行

  ++j;//j+1到下一行

  }

  if (type ==1)//從上到下

  {

  --i;//i退到 最外層處

  for (int index = j + gap; j< n - gap&&num <= n*n; ++j)

  arr[i + j*n] = num++;

  ++type;

  --i; //i退到最外層-1處

  }

  if (type == 2)//從右到左

  {

  --j;//j退到未寫入最外層

  for (int index = i - gap; i >= gap&&num <= n*n; --i)

  arr[i + j*n] = num++;

  ++type;

  ++i;//i到左邊未遍歷最外層

  }

  if (type == 3)//從下道上

  {

  --j;//j退到未寫入最外層

  for (int index = n - gap; j > gap&&num <= n*n; --j)

  arr[i + j*n] = num++;

  ++j;//j退到未寫入最外層

  ++i;//i到左邊未遍歷最外層

  type = 0;//寫入方向 類型 重新置1

  }

  gap++;//四個(gè)方向 都寫入完成 跨度+1

  }

  for (int index = 0; index < n*n; ++index)

  cout << arr[index] << ‘ ‘;

  cout << endl;

  delete arr;

  }

  //在一個(gè)字符串中 刪除多余字符后 找到最長(zhǎng)的 回文字符串長(zhǎng)度

  //eg:abbedbba 結(jié)果 abbebba

  //邏輯龐大 十分復(fù)雜 網(wǎng)上好像有高端算法

  int PlalindromeNum(char* str,int start,int end)

  {

  if (*str == 0)//判斷 指針有效性

  return 0;

  int count = 0;//當(dāng)前回文字符串的字符數(shù)

  int bigCnt = 1;//最大回文字符串字符數(shù)

  int right = end;//臨界值

  while (start

  { //start 與end為當(dāng)前子串最兩端一對(duì)相同字符

  for (int i = start + 1; i <=right; ++i)

  {

  if (str[i] == str[start])

  {

  end = i;

  count = 2;//有相同項(xiàng) count為2

  }

  }

  if (count != 2)//沒有相同項(xiàng) 跳到下個(gè)字符

  ++start;

  }

  if (end - start>2)//遞歸 找一對(duì)相同字符中的其他相同字符數(shù)量

  count += PlalindromeNum(str, start + 1, end - 1);

  else if (end - start == 2)//當(dāng)end-start相距為2 說明中間包含若干單獨(dú)字符 count++

  {

  ++count;

  }

  if (right -end>1)//如果臨界值-end>1說明后面還有沒有遍歷的字符

  {

  if (bigCnt < count)//則將count 保存 置0

  bigCnt = count;

  count = 0;

  count += PlalindromeNum(str, end+1 , right);//從子串開始繼續(xù)遞歸找匹配字符

  }

  if (bigCnt < count)

  bigCnt = count;//始終保持bigCnt為最長(zhǎng)回文子串的字符數(shù)

  return bigCnt;

  }

  ////用遞歸實(shí)現(xiàn)n位的格雷碼 //至今未想明白

  //

  //char* Gray(int n)

  //{

  // char *arry = (char*)malloc(sizeof(char)*(int)pow(2, n)+1);

  // if (n =1)

  // {

  // arry[0] = ‘0‘;

  // arry[1] = ‘1‘;

  // arry[2] =0 ;

  // return arry ;

  // }

  //

  // char * tmp=Gray(n - 1);

  // int j = (int)pow(2, n) - 2;

  // for (int i = 0;i

  // {

  // arry[i] = tmp[i] + 0;

  // arry[j - 1 - i] = tmp[i] + 1;

  // }

  // return arry;

  //}

  //

  //有一串珠子2種顏色(紅,藍(lán)),n個(gè)(n為奇數(shù)),有多少個(gè)藍(lán)珠子才能確定無論什么順序穿

  //都能從不同位置的兩個(gè)藍(lán)珠子

  //截?cái)酁?串,并得到一串?dāng)?shù)量為(n+1)/2(不包括這兩個(gè)藍(lán)色珠子)

  //重在邏輯理解 代碼簡(jiǎn)單

  void pearl_num(int n)

  {

  if (n < 3 || n % 2 != 1)

  return;

  int head = 0,end=0,count=0,num=2;

  for (int i = 1; i

  {

  end = i;

  if (end == (n + 1) / 2)

  {

  printf("%d\n", num);

  return;

  }

  if ((end - head - 1) == (n + 1) / 2 || (n - 1 - end) == (n + 1) / 2)

  {

  i++;

  }

  else if (count > 0)

  {

  count--;

  i++;

  }

  else

  {

  num++;

  count=num-2;

  i = 1;

  }

  }

  printf("無答案!\n");

  }

  //數(shù)字的漢子讀法 0<=num<1000 例如 輸入 101 輸出yibailingyi

  void test()

  {

  int num = 0;

  char* a[12] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "shi", "bai" };

  while (1)

  {

  int arr[3] = { 0 };

  char* pinyin = ((char*)malloc(sizeof(char)*20));

  scanf("%d", &num);

  int tmp1 = num;

  for (int i = 2; i >= 0; --i)

  {

  arr[i] = num % 10;

  num /= 10;

  }

  char* tmp = pinyin;

  for (int i = 0; i<3; ++i)

  {

  if (tmp1 == 0)

  {

  strcpy(pinyin, "ling\0");

  pinyin += 4;

  break;

  }

  if (i == 0)

  {

  if (arr[i] != 0)

  {

  strcpy(pinyin, a[arr[i]]);

  pinyin += (int)strlen(a[arr[i]]);

  strcpy(pinyin, a[11]);

  pinyin += 3;

  }

  }

  else if (i == 1)

  {

  if (arr[i] == 0)

  {

  if (arr[i - 1] == 0)

  continue;

  if (arr[i + 1] == 0)

  break;

  strcpy(pinyin, a[0]);

  pinyin += 4;

  }

  else

  {

  strcpy(pinyin, a[arr[i]]);

  pinyin += (int)strlen(a[arr[i]]);

  strcpy(pinyin, a[10]);

  pinyin += 3;

  }

  }

  else

  {

  if (arr[i] != 0)

  {

  strcpy(pinyin, a[arr[i]]);

  pinyin += (int)strlen(a[arr[i]]);

  }

  }

  free(pinyin);

  }

  *pinyin = 0;

  printf("%s\n", tmp);

  pinyin = tmp;

  }

  }

  //小明裝裝備按從左到右裝 如果物品太大 (大于背包最大容量)直接丟棄,如果背包裝不下

  //換下個(gè)背包,前一個(gè)背包不再用,小明能裝多少物品?

  //n 物品數(shù) t 背包負(fù)重 m 背包個(gè)數(shù)

  //a[0]--a[n]被給物品質(zhì)量

  //

  void package()

  {

  int m, t ,n;

  int a[20] = { 0 };

  int i = 0;

  scanf("%d%d%d",&n,&t,&m);

  while (i < n)

  {

  scanf("%d", &a[i++]);

  }

  int count = 0, tmp = t;

  for (i=0; m>0 && n > 0;)

  {

  if (a[i] > tmp)

  {

  i++;

  n++;

  }

  else if (t-a[i]>=0)

  {

  t -= a[i++];

  ++count;

  --n;

  }

  else if (m>1)

  {

  --m;

  t = tmp;

  t -= a[i++];

  ++count;

  --n;

  }

  else

  {

  ++i;

  --n;

  }

  }

  printf("%d\n",count);

  }

  //將字符串 按空格 翻轉(zhuǎn) 同時(shí) 將大小寫互換 例:“this Is a Str”-> "sTR A iS THIS"

  //默認(rèn)給定字符串只含有字母與空格

  void reverse_str_A(char * src)

  {

  char* str = (char*)malloc(sizeof(char)*(strlen(src)));//將給定字符串拷貝到可寫字符數(shù)組中

  strcpy(str,src);

  char* tmp = str;

  int i = 0;

  char* out = (char*)malloc(sizeof(char)*(strlen(str) ));//生成儲(chǔ)存處理后的字符數(shù)組

  char* output = out;

  while (*(tmp))//計(jì)算空格個(gè)數(shù)

  {

  if (*tmp++ == ‘ ‘&&*tmp!=0)//‘\0‘之前的不計(jì)算

  ++i;

  }

  int count = i;

  int *a = (int *)malloc(sizeof(int)*i);//生成記錄空格下標(biāo)的數(shù)組

  tmp = str;

  i = 0;

  int j = 0;

  while (*tmp)//將空格下標(biāo)記錄并替換為‘\0‘方便拷貝

  {

  if (*tmp == ‘ ‘)//

  {

  *tmp = 0;

  if (*(tmp + 1)== 0)//‘\0‘之前的空格直接處理 將輸出數(shù)組第一個(gè)字符替換為空格 并指向下一個(gè)

  {

  *output = ‘ ‘;

  output++;

  break;

  }

  a[j++] = i;

  }

  ++tmp;

  ++i;

  }

  tmp = str;

  for ( j = count-1; j>=0; --j)//將分割的字符串從后向前依次寫入輸出字符串并將各自\0替換為空格

  {

  if (a[0] == 0&&j==0)

  break;

  strcpy(output,tmp+a[j]+1);

  output += strlen(tmp + a[j]+1);

  *(output++) = ‘ ‘;

  }

  if (a[0] == 0)//處理開始空格

  tmp++;

  strcpy(output, tmp );//將首字符串拷貝到尾

  output += strlen(tmp );

  if (a[0] == 0)//將開始的空格移到末尾

  {

  output[0]= ‘ ‘;

  output[1] = 0;

  }

  i = 0;

  output = out;

  while (*(output+i))//依次替換大小寫

  {

  if (*(output + i) >= ‘a‘&&*(output + i) <= ‘z‘)

  *(output + i) -= 32;

  else if (*(output + i) >= ‘A‘&&*(output + i) <= ‘Z‘)

  *(output + i) += 32;

  ++i;

  }

  cout << out <<"***********"<< endl;//輸出

  free(out);

  free(output);

  free(a);

  }

  int main()

  {

  cout<

  cout << CowNum1(20) << endl;

  AllColorBead("11231324566457711234567111", 7);

  AllColorBead("asdccaacsdfdgfwererdfg",8);

  SnakeArr(5);

  char* a = "vvaabbcdcbbaaxaabbcdcbbaax";

  cout << PlalindromeNum(a, 0, strlen(a)) << endl;

  /*pearl_num(101);

  package();*/

  reverse_str_A(" This w W w Is str ");

  /*test();*/

  /*char * aa;

  aa=Gray(10);

  cout << aa << endl;*/

  return 0;

  }

本文已影響6827
上一篇:2015年黑龍江農(nóng)村信用社筆試真題 下一篇:

相關(guān)文章推薦

|||||