eg.从两边向中间覆盖打印
//##############
// 逐步覆盖
//hello C world!
//我的错误示范
//#include<windows.h>
//int main()
//{
// char arr1[] = "##############";
// char arr2[] = "hello C world!";
//
// int sz = sizeof(arr1) / sizeof(arr1[0]);
//
// printf("%s", arr1);
// int i = 0;
// for (i = 0; i <= sz/2; i++)
// {
//
// arr1[i] = arr2[i];
// Sleep(1000);
// }
//
// printf("%s", arr1);
// for (i = 0; i < sz; i++)
// printf("%c", arr1[i]);
//
// return 0;
//}
//答案
#include<Windows.h>
#include<string.h>
int main()
{
char arr1[] = "##############";
char arr2[] = "hello C world!";
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;
//[a, b, c, \0]
// 0 1 2 下标
int right = strlen(arr1) - 1;
while (left < right) {
arr1[left] = arr2[left];
arr1[right] = arr2[right];
printf("%s\n", arr1);
Sleep(1000);
//休息1s
system("cls");
//系统函数,清空屏幕,达到覆盖作用
left++;
right--;
}
printf("%s\n", arr1);
return 0;
}
折半查找/二分查找
//折半查找算法/二分查找算法
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
right = mid - 1;
else if (arr[mid] < k)
left = mid + 1;
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到了!");
}
return 0;
}
折半查找自己写:
//折半查找(自己写)
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,18 };
int k = 0;
printf("请输入要查找的数字:>");
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid -1;
}
else if (arr[mid] < k) {
left = mid + 1;
}
else
{
printf("找到了,下标为%d\n", mid);
//不用k-1,用mid--k-1有局限性
break;
}
}
if(left > right)
printf("没找到!\n");
}