1、一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
找出这两个数字,编程实现。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void sort(int* arr, int sz) {
assert(arr!=NULL);
for (int i = 0; i < sz - 1; i++) {
for (int j = 0; j < sz - 1-i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
}
void Tofind_num(int* arr, int sz,int* num1,int* num2) {
assert(arr!=NULL);
assert(num1!=NULL);
assert(num2!=NULL);
int tmp = 0;
for (int i = 0; i < sz; i+=2) {
if (arr[i] == arr[i + 1]) {
continue;
}
else{
if (tmp == 0) {
*num1 = arr[i];
++i;
}
else if(tmp == 1){
*num2 = arr[i];
++i;
}
++tmp;
}
}
}
int main() {
int arr[10] = { 2,1,3,5,6,5,4,2,4,3 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num1, num2;
sort(arr, sz);
Tofind_num(arr, sz,&num1,&num2);
printf("%d %d\n",num1,num2);
system("pause");
return 0;
}

2、喝汽水,一瓶汽水1元,两个空瓶可以换一瓶汽水,给20元,可以喝多少汽水 ,编程实现。
int main() {
int total_bottle = 20;
int empty_bottle = 20;
int surplus_empty_bottle = 0;
while (empty_bottle >= 1) {
empty_bottle = empty_bottle + surplus_empty_bottle;
total_bottle = total_bottle + empty_bottle / 2;
surplus_empty_bottle = empty_bottle % 2;
empty_bottle = empty_bottle / 2;
}
printf("total_bottle = %d瓶\n", total_bottle);
system("pause");
return 0;
}

3、模拟实现strcpy,strcat,strcmp,strlen
size_t Strlen(const char* arr) {
assert(arr != NULL);
size_t a = 0;
while (*arr != '\0') {
arr++;
++a;
}
return a;
}
char* Strcat(char* arr, const char* brr) {
assert(arr != NULL);
assert(brr != NULL);
int i = 0;
for (; arr[i] != '\0'; ++i);
for (int j = 0; brr[j] != '\0'; ++j,++i) {
arr[i] = brr[j];
}
arr[i] = '\0';
return arr;
}
char* Strcpy(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
int i = 0;
for (; dest[i] != '\0'; ++i) {
dest[i] = src[i];
}
return dest;
}
int Strcmp(const char* arr, const char* brr) {
assert(arr != NULL);
assert(brr != NULL);
int i = 0;
for (; arr[i] != '\0'&&brr[i] != '\0'; ++i) {
if (arr[i] < brr[i]) {
return -1;
}
else if (arr[i] > brr[i]) {
return 1;
}
else {
}
}
if (arr[i] < brr[i]) {
return -1;
}
else if (arr[i] > brr[i]) {
return 1;
}
else {
return 0;
}
}
int main() {
char arr[20] = "abc";
char brr[10] = "def";
printf("%d\n",Strlen(arr));
Strcat(arr, brr);
printf("%s\n", arr);
Strcpy(arr, brr);
printf("%s\n", arr);
int ret = Strcmp(arr, brr);
if (ret == 0) {
printf("arr == brr\n");
}
else if (ret < 0) {
printf("arr < brr\n");
}
else if (ret > 0) {
printf("arr >brr\n");
}
system("pause");
return 0;
}




2695

被折叠的 条评论
为什么被折叠?



