1.一个数组中只有两个数字是出现一次,
其他所有数字都出现了两次。
找出这两个数字,编程实现。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int arr[] = { 1, 3, 4, 2, 1, 4, 3, 7};
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++) {
int flag = 0;
for (int j = 0; j < len; j++) {
if (arr[j] == arr[i]) {
flag++;
}
}
if (flag == 1) { //如果flag
printf("%d\n", arr[i]);
}
}
system("pause");
return 0;
}
2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,
给20元,可以多少汽水。
编程实现。
int main() {
int total = 20;
int empty = 20;
while (empty >= 2) {
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("20元可以喝%d瓶饮料\n", total);
system("pause");
return 0;
}
3.模拟实现strcpy
char* cpy_str(char* des, const char* src) { //将s2的字符串复制到s1中
char* tmp = des;
while (*src != '\0') {
*des = *src;
des++;
src++;
}
return tmp;
}
int main() {
char a[1024] = "Beijing!";
char b[1024] = "bbbb";
char c[1024] = "cccc";
strcpy(b, a);
cpy_str(c, a);
printf("%s\n", a);
printf("%s\n", b);
printf("%s\n", c);
system("pause");
return 0;
}
4.模拟实现strcat
char* cpy_str(char* des, const char* src) { //将s2的字符串复制到s1中
char* tmp = des;
while (*src != '\0') {
*des = *src;
des++;
src++;
}
return tmp;
}
char* cat_str(char* des, const char* src) {
char* tmp = des;
tmp += strlen(des); //指向最后一个元素
//后面的直接复制进des
cpy_str(tmp, src); //调用上次自己写的strcpy
return tmp;
}
int main() {
char a[1024] = "Beijing";
char b[1024] = "April";
char c[1024] = "Hello ";
char d[1024] = "I'm ";
strcat(c, a); // c加到a上
cat_str(d, b); // b加到d上
printf("%s\n", a);
printf("%s\n", b);
printf("%s\n", c);
printf("%s\n", d);
system("pause");
return 0;
}
5.模拟实现strcmp
int cmp_str(const char* s1, const char* s2) {
int count = 0;
while (*s2 != '\0') {
count += *s2 - *s1;
s2++;
s1++;
}
return count;
}
int main() {
char a[1024] = "abcdef";
char b[1024] = "abcdef";
printf("%d\n", strcmp(a, b));
system("pause");
return 0;
}