1.一个数组中只有两个数字是出现一次,
其他所有数字都出现了两次。
找出这两个数字,编程实现。
我的想法:除了两个数字是单次出现外,其他都是都是两个成对出现。那我们可以先遍历数组,找出在这个数组中没有跟它相等的,然后输出就OK了。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Find(int arr[10],int len)
{
for (int i = 0; i < len; i++)
{
int count = 0;
for (int j = 0; j < len; j++)
{
if (arr[i] == arr[j]&&i!=j)
{
count++;
}
}
if (count == 0)
{
printf("%d\n", arr[i]);
}
}
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 4, 6, 3, 1, 5 };
int a = sizeof(arr) / sizeof(int);
Find(arr,a);
system("pause");
return 0;
}
2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,
给20元,可以买多少汽水。
编程实现。
我的想法:先把钱全部买汽水。然后空瓶继续换。把这样当成一个循环,直到换不了汽水为止。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Soad()
{
int a = 0;//汽水数
int b = 0;//空瓶数
int m = 0;//给的钱数
int count = 0;//能买到的总数
printf("请输入钱数->");
scanf("%d", &m);
while (m >= 1 || b >= 2 || a >= 2)
{
if (m > 0)//用钱买汽水
{
a = m;
m = 0;
b = a;
count += a;
}
if (a >= 0)//汽水变成空瓶
{
b = a;
}
if (b >= 2)//空瓶换汽水
{
a = b / 2;
b = b - 2 * a;
count += a;
}
}
printf("%d\n", count);
}
int main()
{
Soad();
system("pause");
return 0;
}
3.模拟实现strcpy
首先要知道strcpy是什么,它是将一个字符串复制到另一个字符串里面。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char* Strcpy(char arr1[],char arr2[])
{
int i = 0;
for (; arr1[i] != '\0';i++)
{
arr1[i] = arr2[i];
}
arr1[i] = '\0';
return arr1;
}
int main()
{
char arr1[1024] = "abcd";
char arr2[] = "ABCD";
Strcpy(arr1, arr2);
printf("%s\n", arr1);
system("pause");
return 0;
}
4.模拟实现strcat
strcat:将两个字符串结合起来。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char* Strcat(char arr1[], char arr2[])
{
int i = 0;
for (; arr1[i] != 0; i++);
for (int j = 0; arr2[j] != '\0'; j++,i++)
{
arr1[i] = arr2[j];
}
arr1[i] = '\0';
return arr1;
}
int main()
{
char arr1[1024] = "abcd";//数组范围大点就不用担心访问越界
char arr2[] = "ABCD";
Strcat(arr1, arr2);
printf("%s\n", arr1);
system("pause");
return 0;
}