1031. square root

#include<stdio.h>
#include<math.h>
// 求x*2-n=0的艮
double fun(double a, double n)
{
return a * a - n;
}
//对a求导
double part_func(double a)
{
return 2 * a;
}
int main()
{
double input, output;
scanf("%lf", &input);
if(input == 0)
{
printf("%.6f", 0.0);
return 0;
}
output = input - fun(input, input) / part_func(input);
while(fabs(output - sqrt(input)) > 1e-8)
{
output = output - fun(output, input) / part_func(output);
}
printf("%.6lf", output);
return 0;
}
1032 素数判断
#include<stdio.h>
#include<math.h>
int main()
{
int a;
scanf("%d", &a);
if(a == 2)
{
printf("Yes");
return 0;
}
else if(a == 1)
{
printf("No");
return 0;
}
int temp = sqrt(a) + 1;
for(int i = 2; i <= temp; i++)
{
if(!(a % i))
{
printf("No");
return 0;
}
}
printf("Yes");
return 0;
}
1033. 等差数列
输入 n 个整数,判断它们是否构成一个等差数列。
#include<stdio.h>
int main()
{
int diff, a, b;//
scanf("%d%d", &a, &b);
diff = b - a;
a = b;
while(scanf("%d", &b) != EOF)
{
if(diff != b - a)
{
printf("No");
return 0;
}
a = b;
}
printf("Yes");
return 0;
}
1034. 统计1的个数
输入一个非负 int 类型整数,在一行中输出该整数的二进制表示中值为 1 的位数。
#include<stdio.h>
int main()
{
unsigned int in;
scanf("%u", &in);
int cnt = 0;
while(in)
{
if(in % 2)
cnt++;
in >>= 1;
}
printf("%d", cnt);
return 0;
}
1035. 二分查找

#include<stdio.h>
#include<stdlib.h>
int n;
long long bi_search_r(int l, int r, long long data, long long* arr)
{
if(arr[r] == arr[l])//注意开头为0不需要输出
{
if(arr[l] == data)
return n - 1;
else return 0xffff;
}
while(l <= r)
{
int mid = (l + r) / 2;
if(arr[mid] > data)
{
r = mid - 1;
}
else if(arr[mid] < data || (arr[mid] == data && arr[mid + 1] == data) )
{
l = mid + 1;
}
else if(arr[mid] == data && mid == n - 1)//注意边界
return mid;
else if(arr[mid] == data && arr[mid + 1] > data)
return mid;
}
return 0xffff;
}
long long bi_search_l(int l, int r, long long data, long long* arr)
{
if(arr[r] == arr[l])
{
if(arr[r] == data)
return 0;
else return 0xffff;
}
while(l <= r && l >= 0 && r < n)
{
int mid = (l + r) / 2;
if(arr[mid] > data || (arr[mid] == data && arr[mid - 1] == data))
{
r = mid - 1;
}
else if(arr[mid] < data )
{
l = mid + 1;
}
else if(arr[mid] == data && mid == 0)
return mid;
else if(arr[mid] == data && arr[mid - 1] < data)
return mid;
}
return 0xffff;
}
int main()
{
long long fl = 0xffff, fr = 0xffff, data;
scanf("%lld", &n);
long long *arr = (long long*)malloc(sizeof(long long) * n);
for(int i = 0; i < n; i++)
scanf("%lld", arr + i);
scanf("%lld", &data);
fl = bi_search_l(0, n - 1, data, arr);
fr = bi_search_r(0, n - 1, data, arr);
if(fl == 0xffff)
printf("%X%04X", fl, fr);//
else if(fl == 0 && fr == n - 1)
printf("%X", fr);
else
printf("%X%04X", fl, fr);
}
本文包含四个不同的数值计算问题的C程序实现:平方根的牛顿迭代法、素数判断、等差数列检测和二分查找。程序分别解决求平方根、检查整数是否为素数、判断一组数是否成等差数列以及在有序数组中查找目标值的边界位置。这些算法展示了基础的数学计算和搜索策略在编程中的应用。

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



