写题思路的分享

简介: 写题思路的分享

1.打印闰年

1.确定变量的数量,只有年份year一个变量;

2.变量范围:输出1000~2000之间的闰年,则1000<=year<=2000;

3.判断year为闰年需要满足两种条件组合中的任意一种:1、year能被4整除且year不能被100整除 2、year能被400整除。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int year = 0;
  for (year = 1000; year <= 2000; year++)
   {
    if (year % 4 == 0 && year % 100 != 0)
      printf("%d ", year);
    else if (year % 400 == 0)
      printf("%d ", year);
   }
  return 0;
}

2.求十个数中的最大值

1、首先需要定义一个整型数组空间,因为这里需要输入十个数,所以数组空间为10个。

2、接着定义一个最大值Max,初始默认值为0,这个用于后续值的比较。

3、接着使用for循环,来连续接收10个数字的输入。

4、再使用一个for循环来循环数组,求得最大值Max。

5、循环结束后,输出最终的结果,也就是我们需要的10个数中的最大值。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int arr[10];
  int Max = 0;
  for (int  i = 0; i < 10; i++)
  {
    scanf("%d", &arr[i]);
  }
  for (int i = 0; i < 10; i++)
  {
    if (arr[i] >= Max)
    {
      Max = arr[i];
    }
  }
  printf("十个数中最大的是:%d", Max);
  return 0;
}

3.二分查找

二分查找算法的目标可以分为三个:

1、查找目标值,若存在返回下标;不存在,返回-1

2、查找目标值的左边界,若序列所有元素大于目标值,返回-1

3、查找目标值的右边界,若序列所有元素小于目标值,返回序列长度

实现思路

1.right的初始化取值为序列的长度-1,则初始化判断区间为[0,len-1],左闭右闭区间,后续判断区间为[left,right]。所以while循环的结束条件为left>right,判断条件为left<=right。

2.在每次进行区间拆半操作时,即对[left,right]进行拆半,中位元素arr[mid]已经搜索完毕,使得下次搜索区间仍然为左闭右闭区间,则左半区间为[left,mid-1],右半区间为[mid+1,right]。所以right=mid-1。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[1]);
  int k = 0;
  scanf("%d", &k);
  int left = 0;
  int right = sz-1;
  int flag = 0;
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (arr[mid] < k)
      mid = left + 1;
    else if (arr[mid] > k)
      mid = right - 1;
    else
    {
      printf("找到了,下标是:%d\n", mid);
      flag = 1;
      break;
    }
  }
  if (flag == 0)
    printf("找不到了");
  return 0;
}

4.将数组A中的内容和数组B中的内容进行交换。(数组一样大)

不管使用哪种方法(创建临时变量还是不创建),如果交换数值写成函数的形式,一定要传地址。
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void temp(int* x, int* y)
{
  *x = *x ^ *y;
  *y = *x ^ *y;
  *x = *x ^ *y;
}
int main()
{
  int arr1[] = { 1, 2, 3, 4, 5 };
  int arr2[] = { 6, 7, 8, 9, 10 };
  int sz = sizeof(arr1) / sizeof(arr1[0]);
  for (int i = 0; i < sz; i++)
  {
    temp(&arr1[i], &arr2[i]);
  }
  printf("交换后数组arr1的值:");
  for (int i = 0; i < sz; i++)
  {
    printf("%d ", arr1[i]);
  }
  printf("\n");
  printf("交换后数组arr2的值:");
  for (int i = 0; i < sz; i++)
  {
    printf("%d ", arr2[i]);
  }
}

今天的分享就到这里了,感谢烙铁们的阅读。

相关文章
|
存储 小程序 数据库
小程序整体的思路
小程序整体的思路
461 0
|
存储 Serverless 测试技术
C++【初识哈希】
C++【初识哈希】
160 0
|
缓存 索引
从leetCode写题总结的程序优化思路
从leetCode写题总结的程序优化思路
110 0
|
安全 Shell 网络安全
5项目五:W1R3S-1(思路为主!)
5项目五:W1R3S-1(思路为主!)
148 0
|
算法 C语言
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
|
机器学习/深度学习 存储 缓存
力扣70爬楼梯:思路分析+优化思路+代码实现+补充思考
力扣70爬楼梯:思路分析+优化思路+代码实现+补充思考
393 0
|
存储 算法 C++
数据结构与算法——第四节 栈和队列(C 模拟实现+思路分析+运行截图)
对于栈和队列,我们在这里只是把 其底层的原理简单的说一下,等到C++说到STL的时候,我们还会详细地说。
334 0
数据结构与算法——第四节 栈和队列(C 模拟实现+思路分析+运行截图)
|
存储 C语言 C++
数算部分第二节——顺序表(C语言实现+思路分析+源码分析+运行)
初始化函数,简而言之,我们想要它能够将我的这个顺序表初始化。
877 0
数算部分第二节——顺序表(C语言实现+思路分析+源码分析+运行)
|
Java C# C++
面向过程的程序的开发思路
面向过程的程序的开发思路
274 0