1.求阶乘
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 1;
int i = 0;
for (i = 1; i <= n; i++)
{
ret = ret*i;
}
printf("%d\n", ret);
return 0;
}
2.求阶乘的和
(1)构造双重循环
int main()
{
int i = 0;//控制求和
int j = 0;//控制求阶乘
int ret = 1;
int n = 0;
int sum = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
ret = 1;//外层循环完成一层之后,就重置为1;
for (j = 1; j <= i; j++)
{
ret = ret*j;
}
sum = sum + ret;
}
printf("%d\n", sum);
}
(2)单层循环
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 1;
int i = 0;
int sum = 0;
for (i = 1; i <= n; i++)
{
ret = ret*i;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
3.演示多个字符从两端移动 向中间汇聚
//演示多个字符从两端移动 向中间汇聚
#include<string.h>
#include<windows.h>
int main()
{
char arr1[] = "hello bit!!!!!!!!";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(300);//睡眠函数
system("cls");//执行系统命令——清除
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
4.二分查找
#include<stdio.h>
#include<string.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,0};/假设查找在一个数组中查找
int left=0;//查找范围左边界
int right=sizeof(arr[10])-1;//查找范围左边界
int mid=0;
int k=4;//假设要查找4
while(left<=right)
{
mid=(left+right)/2;
if(arr[mid]<k)
{
left=mid+1;//已经知道数据不在原来left和mid之间,因此放弃这段区域,重新设置left
}
else if(arr[mid]>k)
{
right=mid-1;//已经知道数据不在原来mid和right之间,因此放弃这段区域,重新设置right
}
else
{
printf("找到了,下标为%d\n",mid);
break;
}
}
if(left>right)
{
printf("找不到\n");
}
return 0;
}
每次的查找范围缩小一半,效率很高