華為部分線上測試題
// huaweiDemo2.cpp: 定義控制檯應用程式的入口點:平臺-VS2017,2019-01-01
//
//1-問題:就算串長度
//輸入一個字串,用指標求出字串的長度。
/*
#include "stdafx.h"
#include "stdio.h"
int main()
{
char str[20], *p;
int length = 0;
printf("Please input a string : ");
scanf("%s", str);// gets(str);
p = str;
while (*p++)
{
length++;
}
printf("The length of string is %d\n", length);
scanf("%s", str);//
return 0;
}
*/
//2-問題:查詢並替換子串
//使用C語言實現字串中子字串的替換
/*
#include "stdafx.h"
#include "stdio.h"
#include <string.h>
void StrReplace(char* strSrc, char* strFind, char* strReplace);
#define M 100;
int main()
{
char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char s1[] = "RST";
char s2[] = "ggg";
printf("%s\n", s);
StrReplace(s, s1, s2);
printf("%s\n", s);
scanf("%s",s);//顯示
return 0;
}
void StrReplace(char* strSrc, char* strFind, char* strReplace)
{
int i = 0;
int j;
int n = strlen(strSrc);
int k = strlen(strFind);
for (i = 0; i<n; i++)
{
if (*(strSrc + i) == *strFind)
{
for (j = 0; j<k; j++)
{
if (*(strSrc + i + j) == *(strFind + j))
{
*(strSrc + i + j) = *(strReplace + j);
}
else continue;
}
}
}
}
*/
//3-問題:間隔輸出串
//編寫一個程式實現功能:將字串”Computer Secience”賦給一個字元陣列,然後從第一個字母開始間隔的輸出該串,用指標完成。
/*
#include "stdafx.h"
#include "stdio.h"
#include <string.h>
int main()
{
char s[] = "Computer Secience";
char *str=s;
int flag_t = 1;
while(*str)
{
if (flag_t)
{
printf("%c",*str);
}
flag_t = (flag_t + 1) % 2;
str++;
}
scanf("%d",flag_t);
return 0;
}
*/
//4問題:拼串
//編寫一個程式實現功能:將兩個字串合併為一個字串並且輸出,用指標實現。char str1[20] = { “Hello ” }, str2[20] = { “World ” };
/*
#include "stdafx.h"
#include <stdio.h>
int main()
{
char str1[60] = { "Hello " }, str2[40] = { "World!" },str3[30] = {" Welcome to C world!"};
char *p = str1, *q1 = str2,*q2=str3;
while (*p) //str1和p都指向同一個地址,利用p來操作-修改str1
p++;
while (*q1)
{
*p = *q1;
p++;
q1++;
}
while (*q2)
{
*p = *q2;
p++;
q2++;
}
*p = '\0';
printf("%s\n", str1); //str1和p都指向同一個地址,修改p即修改str1
scanf("%s", str1);
return 0;
}
*/
//5問題:遞迴數列的計算
//以下函式的功能是用遞迴的方法計算x的n階勒讓德多項式的值。已有呼叫語句p(n,x);編寫函式實現功能。
/*
#include "stdafx.h"
#include <stdio.h>
float p(int x, int n)
{
float t, t1, t2;
if (n == 0) return 1;
else if (n == 1) return x;
else
{
t1 = (2 * n - 1)*x*p(x, (n - 1));
t2 = (n - 1)*p(x, (n - 2));
t = (t1 - t2) / n;
return t;
}
}
int main()
{
int x, n;
printf("input two int(x and n) : ");
scanf("%d%d", &x, &n);
printf("%.2f\n", p(x, n));
printf("input two int(x and n) : ");
scanf("%d%d", &x, &n);
printf("%.2f\n", p(x, n));
printf("input two int(x and n) : ");
scanf("%d%d", &x, &n);
printf("%.2f\n", p(x, n));
return 0;
}
*/
//6問題:echo功能
//給主函式傳遞引數實現echo功能:
/*
#include "stdafx.h"
#include "stdio.h"
int main(int argc, char *argv[])
{
int i = 1;
while (i < argc)
{
printf("%s",argv[i]);
i++;
}
printf("\n");
scanf("%d",&i);
return 0;
}
*/
//7-兩陣列比較(對應比較)
//要求從陣列最後一個元素開始逐個元素向前比較,如果2個陣列長度不等,則只比較較短長度陣列個數元素。
/*
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "stdafx.h"
int array_compare(int len1, int array1[], int len2, int array2[])
{
int count = 0;
for (; len1 >= 0 && len2 >= 0; len1--, len2--)
{
if (array1[len1 - 1] == array2[len2 - 1])
{
count++;
}
}
return count;
}
int main()
{
int result = 0;
int array1[] = { 1,3,5 };
int len1 = 3;
int array2[] = { 77,12,1,3,5 };
int len2 = 5;
result = array_compare(len1, array1, len2, array2);
printf("the result is %d", result);
//scanf("%d",&result);
return 0;
}
*/
//8約瑟夫環--指標和連結串列(可用指標和陣列來做)
//約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。
//從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;
/*
//依此規律重複下去,直到圓桌周圍的人全部出列。
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int num;
struct Node *next;//一個Node型別的指標
}LinkList;
LinkList *creat(int n)//返回一個LinkList型別的指標
{
LinkList *p, *q, *head;
int i = 1;
p = (LinkList *)malloc(sizeof(LinkList));
p->num = i;
head = p;
for (i = 2; i <= n; i++)
{
q = (LinkList *)malloc(sizeof(LinkList)); //Malloc()向系統申請分配指定size個位元組的記憶體空間。返回型別是 void* 型別。void* 表示未確定型別的指標。C,C++規定,void* 型別可以強制轉換為任何其它型別的指標。
q->num = i;
p->next = q;
p = q;
}
p->next = head; //使連結串列尾指向連結串列頭 形成迴圈連結串列
return head;
}
void fun(LinkList *L, int m)
{
int i;
LinkList *p, *s, *q;
p = L;
printf("出列順序為:");
while (p->next != p)
{
for (i = 1; i<m; i++)//*從1開始
{
q = p;
p = p->next;
}
printf("%5d",p->num);
s = p;
q->next = p->next;
p = p->next; //使p指向新的起點
free(s);//free()與malloc()函式配對使用,釋放malloc函式申請的動態記憶體
}
printf("%5d\n", p->num);
}
int main()
{
LinkList *L;
int n, m;
n = 9;//n=9個人
m = 5;//出列的號數為5
L = creat(n);
fun(L, m);
scanf("%d",&n);
return 0;
}
*/
//9-號碼有效性判斷
//特點如下:1、 長度13位;2、 以86的國家碼打頭;3、 手機號碼的每一位都是數字。
/*
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define LENGTH 13
int verifyMsisdn(char *inMsisdn)
{
//char *pchar=NULL;
assert(inMsisdn != NULL);
if (LENGTH == strlen(inMsisdn))
{
if (('8' == *inMsisdn) && (*(inMsisdn + 1) == '6'))
{
while (*inMsisdn != '\0')
{
if ((*inMsisdn >= '0') && (*inMsisdn <= '9'))
inMsisdn++;
else
return 2;//非法字元
}
}
else return 3; //開頭不合法
}
else return 1; //長度不合法
return 0; //號碼合法!
}
int main()
{
char *pchar = NULL;
unsigned char ichar = 3;
int result;
switch (ichar)
{
case 0:
pchar = "8612345363789"; break; //返回: 1
case 1:
pchar = "861111111111111"; break; //
case 2:
pchar = "86s1234536366"; break; //
case 3:
pchar = "1392222222222"; break;
default:
break;
}
result = verifyMsisdn(pchar);
printf("result is %d\n", result);
//scanf("%d",result);
return 0;
}
*/
//10-迴文陣列判斷
/*
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include "string.h"
int huiwen(char p[])
{
int len = strlen(p);//sizeof(p);
int i=len/2;
for (int j = 0; j < i; j++)
{
if (p[i] != p[len-i-1])
{
return 0;//NO
}
}
return 1; //YES
}
int main()
{
char str1[12];
printf("輸入陣列:\n");
scanf("%s",str1);
printf("輸入陣列:%d \n",huiwen(str1));
//==========================
//char str1[12];
printf("輸入陣列:\n");
scanf("%s", str1);
printf("輸入陣列:%d \n", huiwen(str1));
//==============================
//char str1[12];
printf("輸入陣列:\n");
scanf("%s", str1);
printf("輸入陣列:%d \n", huiwen(str1));
}
*/
//10-選秀打分
//總分 = 專家評委平均分 * 0.6 + 大眾評委 * 0.4,總分取整。如果沒有大眾評委,則 總分 = 專家評委平均分,總分取整。函式最終返回選手得分
/*
#include "stdafx.h"
#include "iostream"
using namespace std;
float cal_score(int score[], int judge_type[], int n)
{
if (NULL == score || NULL == judge_type || 0 == n) return 0;
float sum = 0;
int sum1 = 0, count1 = 0;
int sum2 = 0, count2 = 0;
for (int i = 0; i<n; i++)
{
if (judge_type[i] == 1)
{
sum1 = sum1 + score[i];
count1++;
}
else
{
sum2 = sum2 + score[i];
count2++;
}
}
if (0 == count2) sum = sum1 / count1;
else sum = (sum1 / count1)*0.6 + (sum2 / count2)*0.4;
return sum;
}
void main()
{
int score[3] = { 12,13,15 };
int judge_type[3] = { 1,1,2 };
printf("%d\n", cal_score(score, judge_type, 3));
}
*/
//11-問題:給定一個陣列 input[] ,如果陣列長度 n 為奇數,則將陣列中最大的元素放到 output[] 陣列最中間的位置,
//如果陣列長度 n 為偶數,則將陣列中最大的元素放到 output[] 陣列中間兩個位置偏右的那個位置上,
//然後再按從大到小的順序,依次在第一個位置的兩邊,按照一左一右的順序,依次存放剩下的數。
/*
#include "stdafx.h"
#include "iostream"
using namespace std;
void bubblesort(int data[], int n)
{
int temp = 0;
for (int i = 0; i<n; i++)
{
for (int j = i + 1; j<n; j++)
{
if (data[i]<data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
void sort(int input[], int n, int output[])
{
int *sort_input = new int[n];//用new和delete動態建立和釋放陣列或單個物件
for (int i = 0; i<n; i++)
{
sort_input[i] = input[i];
}
bubblesort(sort_input, n); //先做氣泡排序
if (1 == n % 2)//奇
{
int mid = n / 2;
int k = 0;
output[mid] = sort_input[k++];
for (int j = 1; j <= n / 2; j++)
{
output[mid - j] = sort_input[k++];
output[mid + j] = sort_input[k++];
}
}
else //偶數
{
int mid = n / 2;
int k = 0;
output[mid] = sort_input[k++];
for (int j = 1; j<n / 2; j++)
{
output[mid - j] = sort_input[k++];
output[mid + j] = sort_input[k++];
}
output[0] = sort_input[k++];
}
delete sort_input;//用new和delete動態建立和釋放陣列或單個物件
}
void main()
{
int input1[] = { 3, 6, 1, 9, 7 };
int output1[5];
memset(output1, 0, 5 * sizeof(int));
int input2[] = { 3, 6, 1, 9, 7, 8 };
int output2[6];
memset(output2, 0, 6 * sizeof(int));
sort(input1, 5, output1);
sort(input2, 6, output2);
for (int k = 0; k<5; k++)
printf("%d", output1[k]);
printf("\n");
for (int k = 0; k<6; k++)
printf("%d", output2[k]);
printf("\n");
}
*/
//12刪除字串中所有給定的子串問題描述:
//在給定字串中查詢所有特定子串並刪除,如果沒有找到相應子串,則不作任何操作。
/*
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
void del_substr(char s1[],char s2[]);
void del_substr(char s1[],char s2[])
{
int i=0,k=0,j=0,len_s1,len_s2;
len_s1=strlen(s1);
len_s2=strlen(s2);
//子串比主串長,沒有意義
if(len_s1<len_s2)
return;
while(s1[i])//遍歷s1
{
if(s1[i]-s2[0])//如果和子串的第一個字元不相等,則s1[i]存到"另一個串"
s1[k++]=s1[i++];
else//如果和子串以一個字元相等,則有可能存在子串
{
j=1;
while(!(s1[i+j]-s2[j]) && j<len_s2)
++j;
if(!(j-len_s2))//如果是子串,則將i直接跳過子串,然後繼續執行,將不是子串的存在"另一個串"
i+=j;//跳過子串
else
s1[k++]=s1[i++];
}
}
s1[k]=0;//刪除後,末尾補0
return;
}
int main(void)
{
char date[1001], substring[1001], len1, len2;
printf("輸入字串:");
gets_s(date,100);
len1 = strlen(date);//
printf("輸入子串:");
gets_s(substring,100);
del_substr(date, substring);//刪除子串
len2 = strlen(date);
if (len1 > len2)
{
printf("刪除後:");
puts(date);
}
else
printf("Error!");//沒有子串,輸出error
return 0;
}
*/
//13-作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 50,使用者任務的優先順序 >= 50且 <= 255。
//優先順序大於 255的為非法任務,應予以剔除。現有一任務佇列 task[],長度為 n,task中的元素值表示任務的優先順序,數值越小,優先順序越高。
//函式 scheduler 實現如下功能,將 task[] 中的任務按照系統任務使用者任務依次存放到 system_task[] 陣列和 user_task[] 陣列中
//(陣列中元素的值是任務在 task[] 陣列中的下標),並且優先順序高的任務排在前面,優先順序相同的任務按照入隊順序排列(即先入隊的任務排在前面),陣列元素為-1表示結束。
/*
#include "iostream"
#include "stdafx.h"
using namespace std;
void change(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void bubblesort(int data[], int n, int index[])//氣泡排序並記錄排序後下標
{
int temp = 0;
for (int j = 0; j<n; j++)
index[j] = j;
for (int i = 0; i<n; i++)
{
for (int j = i + 1; j<n; j++)
{
if (data[i]>data[j])
{
change(&data[i], &data[j]);
change(&index[i], &index[j]);
}
}
}
}
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int *sort_task = new int[n];
int *index = new int[n];
for (int i = 0; i<n; i++)
{
sort_task[i] = task[i];
}
bubblesort(sort_task, n, index);
int i = 0;
while (sort_task[i]<50)
{
system_task[i] = index[i];
i++;
}
system_task[i] = -1;
for (int m = 0; m <= i; m++)
{
printf("%d ", system_task[m]);
}
printf("\n");
int k = 0;
while (sort_task[i]>50 && sort_task[i] <= 255)
{
user_task[k++] = index[i++];
}
user_task[k] = -1;
for (int l = 0; l <= k; l++)
{
printf("%d ", user_task[l]);
}
printf("\n");
delete sort_task;
delete index;
}
void main()
{
int task[] = { 0, 30, 155, 1, 80, 300, 170,40,99 };
int n = sizeof(task) / sizeof(int);
int *system_task = new int[n];
int *user_task = new int[n];
scheduler(task, n, system_task, user_task);
}
*/
//14-簡單四則運算問題描述:輸入一個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值
//注:
//1、表示式只含 + , -, *, / 四則運算子,不含括號
//2、表示式數值只包含個位整數(0 - 9),且不會出現 0作為除數的情況
//3、要考慮加減乘除按通常四則運算規定的計算優先順序
//4、除法用整數除法,即僅保留除法運算結果的整數部分。比如 8 / 3 = 2。輸入表示式保證無0作為除數情況發生
//5、輸入字串一定是符合題意合法的表示式,其中只包括數字字元和四則運算子字元,除此之外不含其它任何字元,不會出現計算溢位情況。
/*
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include "assert.h"
struct stack
{//存放後續排列的表示式,模擬棧
char str[80];
int top;
};
struct sstack
{//存放計算表示式的值,模擬棧???
int str[80];
int top;
};
int calculate(int len, char *expStr)
{
char *postexp = new char[len + 1];
stack opstack;
sstack calstack;
calstack.top = -1;
opstack.top = -1;
int i = 0;
int k = 0;
while (expStr[i] != '\0')
{
if (expStr[i] >= '0'&&expStr[i] <= '9')
{
postexp[k++] = expStr[i];
}
else if (expStr[i] == '+' || expStr[i] == '-')
{
while (opstack.top >= 0)
{
postexp[k++] = opstack.str[opstack.top--];
}
opstack.top++;
opstack.str[opstack.top] = expStr[i];
}
else if (expStr[i] == '*' || expStr[i] == '/')
{
while (opstack.top >= 0 && (opstack.str[opstack.top] == '*'
|| opstack.str[opstack.top] == '/'))
{
postexp[k++] = opstack.str[opstack.top--];
}
opstack.top++;
opstack.str[opstack.top] = expStr[i];
}
i++;
}
while (opstack.top >= 0)
{
postexp[k++] = opstack.str[opstack.top--];
}
int temp1 = 0;
int temp2 = 0;
for (i = 0; i<len; i++)
{
if (postexp[i] >= '0'&&postexp[i] <= '9')
{
calstack.top++;
calstack.str[calstack.top] = postexp[i] - '0';
}
else if (postexp[i] == '+')
{
temp1 = calstack.str[calstack.top--];
temp2 = calstack.str[calstack.top];
calstack.str[calstack.top] = temp2 + temp1;
}
else if (postexp[i] == '-')
{
temp1 = calstack.str[calstack.top--];
temp2 = calstack.str[calstack.top];
calstack.str[calstack.top] = temp2 - temp1;
}
else if (postexp[i] == '*')
{
temp1 = calstack.str[calstack.top--];
temp2 = calstack.str[calstack.top];
calstack.str[calstack.top] = temp2 * temp1;
}
else if (postexp[i] == '/')
{
temp1 = calstack.str[calstack.top--];
temp2 = calstack.str[calstack.top];
calstack.str[calstack.top] = temp2 / temp1;
}
}
printf("%d\n", calstack.str[calstack.top]);
return calstack.str[calstack.top];
}
int main()
{
char *expStr = "6+8*4-9/2";
int len = strlen(expStr);
calculate(len, expStr);
return 0;
}
*/
//15-德州撲克問題:一副牌中發五張撲克牌給你:讓你判斷數字的組成:
//有以下幾種情況:
//1:四條:即四張一樣數值的牌(牌均不論花色)2:三條帶 一對
//3:三條帶兩張不相同數值的牌
//4:兩對
//5:順子 包括 10,J,Q,K,A
//6:什麼都不是
//7:只有一對
/*
#include "stdafx.h"
#include "stdio.h"
void sort(int data[], int n)
{
int temp = 0;
for (int i = 0; i<n; i++)
{
for (int j = i + 1; j<n; j++)
{
if (data[i]<data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
void test(int a[], int len)
{
int *b = new int[len];
int count = 0;
bool temp = false;
for (int i = 0; i<len; i++)
{
b[i] = a[i];
}
sort(b, 5);
for (int i = 0; i<len - 1; i++)
{
if (b[i] == b[i + 1])
count++;
}
switch (count)
{
case 0:
if (b[0] - b[4] == 4 && b[0] - b[3] == 3 && b[0] - b[2] == 2 && b[0] - b[1] == 1)
{
printf("順子");
}
else
printf("什麼都不是");
break;
case 1:
printf("只有一對");
break;
case 2:
for (int i = 0; i<3; i++)
{
if (b[i] == b[i + 2])
{
printf("三條帶兩張不相同數值的牌");
temp = true;
break;
}
}
if (!temp)
{
printf("兩對");
}
break;
case 3:
if (b[1] == b[3])
printf("四條:即四張一樣數值的牌");
else
printf("三條帶一對");
break;
}
}
int main()
{
int a[5] = { 3,3,3,3,12 };
printf("\n\t");
test(a, 5);
printf("\n\t");
int b[5] = { 1,3,3,3,12 };
test(b, 5);
return 0;
}
*/
//16-刪除陣列中的重複元素
#include "stdafx.h"
#include <iostream>
using namespace std;
int de(int a[], int n)
{
for (int i = 0; i<n; i++)
for (int j = i + 1; j<n; j++)
if (a[j] == a[i])
{
for (int k = j; k<n - 1; k++)
a[k] = a[k + 1];
n--;
}
for (int i = 0; i<n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
int main()
{
int a[10];
int m = 10;
for (int l = 0; l<10; l++)
cin >> a[l];
de(a, m);
return 0;
}
相關文章
- 【華為機試線上訓練】Day 10
- 【華為機試線上訓練】Day 11
- 【華為機試線上訓練】Day 6
- 【華為機試線上訓練】Day 7
- 【華為機試線上訓練】Day 8
- 【華為機試線上訓練】Day 9
- 【華為機試線上訓練】Day1
- 【華為機試線上訓練】Day2
- 【華為機試線上訓練】Day3
- 【華為機試線上訓練】Day4
- websocket線上測試Web
- websocket線上測試工具Web
- 華為秋招筆試題筆試
- 華為機試題刷題總結
- PHP+MySQL實現線上測試答題例項PHPMySql
- 第1章 軟體測試概述線上測試
- 牛客網--華為機試題
- 華為2019春招筆試題筆試
- 小雞老師華為版終於上線華為應用市場
- 【編測編學】介面測試必備面試題(上)面試題
- 線上xpath選擇器測試工具
- 新浪上線應用——性格色彩測試
- 2018.5.31 everiToken宣佈測試網上線
- 【Java面試】Redis存線上程安全問題嗎?為什麼?Java面試Redis
- 部署伺服器上線部分伺服器
- 分享JavaScript面試題部分JavaScript面試題
- 面試題整理—CSS部分面試題CSS
- 新方案上線,華為為何加碼雲遊戲?遊戲
- 聽說測試“有手就行 ”?華為20年測試老兵乾貨分享!
- 關聯絡統特別多,每次測試還要測試關聯絡統,每次上線都因為關聯絡統的問題,晚上 2 點多才上線成功,這種問題你們怎麼解決
- k8s線上測試環境K8S
- 怎樣使用 Apizza 快速線上測試介面API
- mes系統上線之前要做哪些測試?
- Linux 探索之旅 | 第四部分測試題Linux
- Linux 探索之旅 | 第二部分測試題Linux
- 關於效能測試時線上介面訪問比例的整理的問題
- 測試標題測試標題
- HarmonyOS從基礎到實戰-高效能華為線上答題元服務