数据的储存习题

简介: 数据的储存习题

1 知识点

(1)CPU在计算的时候,以整形的形式进行相加。c=a+b,无论a,b是什么形式,都按照整形的形式相加,不是整形的要发生整形提升,最后的结果要看c的类型。(知识点在详解操作符)

(2)大端正着放,小端倒着放。

(3)大小端字节序指的是数据在电脑上存储的字节顺序。

2 在屏幕上打印杨辉三角。

1

1 1

1 2 1

1 3 3 1

……

代码展示:

1. #include <stdio.h>
2. int main()
3. {
4.  int arr[10][10] = { 0 };
5.  int i = 0;
6.  int j = 0;
7.  for (i = 0; i < 10; i++)
8.  {
9.    for (j = 0; j <= i; j++)
10.     {
11.       if (j == 0)
12.       {
13.         arr[i][j] = 1;
14.       }
15.       if (j == i)
16.       {
17.         arr[i][j] = 1;
18.       }
19.       if (i >= 2 && j >= 1)
20.       {
21.         arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
22.       }
23.       printf("%d ", arr[i][j]);
24.     }
25.     printf("\n");
26.   }
27.   return 0;
28. }

打印结果:

思路:

可以依赖二维数组。

3 利用ascii值 解决问题

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说  已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。

代码展示:

1. #include <stdio.h>
2. int main()
3. {
4.  char killer = 'a';
5.  for (killer = 'a'; killer <= 'd'; killer++)
6.  {
7.    if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
8.    {
9.      printf("%c", killer);
10.     }
11.   }
12.   return 0;
13. }

打印结果:c

思路:利用字符在内存中存储的是ascii值,是连续的。

4 猜名次

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

代码展示

1. #include <stdio.h>
2. int main()
3. {
4.  int a = 0;
5.  int b = 0;
6.  int c = 0;
7.  int d = 0;
8.  int e = 0;
9.  for (a = 0; a <= 5; a++)
10.   {
11.     for (b = 0; b <= 5; b++)
12.     {
13.       for (c = 0; c <= 5; c++)
14.       {
15.         for (d = 0; d <= 5; d++)
16.         {
17.           for (e = 0; e <= 5; e++)
18.           {
19.             if (((b == 2) + (a == 3) == 1) && ((b == 2) + (e == 4) == 1) && ((c == 1) + (d == 2) == 1) && ((c == 5) + (d == 3) == 1) && ((e == 4) + (a == 1)==1))
20.             {
21.               if (a * b * c * d * e == 120)
22.               {
23.                 printf("a= %d b = %d c = %d d = %d e = %d", a, b, c, d, e);
24.               }
25.             }
26.           }
27.         }
28.       }
29.     }
30.   }
31.   return 0;
32. }

打印结果:a=  3 b = 1 c =  5 d = 2 e =  4

解析:如果 第二个if不加上的话,就会出现多种情况。会出现名次相同的情况。

5 改数字

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少

输入:123   输出:101;   输入:222222    输出:0

审题:注意修改前是数字,修改后也是数字。

代码展示:

1. #include <math.h>
2. #include <stdio.h>
3. int main()
4. {
5.  //输入
6.  int a = 0;
7.  scanf("%d", &a);
8.  //计算
9.  int tmp = 0;
10.   int i = 0;
11.   int b = 0;
12.   int sum = 0;
13.   while (a)
14.   {
15.     tmp = a % 10;
16.     if (tmp % 2 == 0)
17.       tmp = 0;
18.     else
19.       tmp = 1;
20.     b = tmp * pow(10, i++);
21.     sum = sum + b;
22.     a = a / 10;
23.   }
24.   //输出
25.   printf("%d", sum);
26.   return 0;
27. }

思路:每一位的数字 换成相应的数字之后,可以乘以10^n,最低位乘以10^0,然后10^1以此类推。

6 小乐乐走台阶

小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?输入包含一个整数n (1 ≤ n ≤ 30)       输出一个整数,即小乐乐可以走的方法数

代码展示:

1. #include <stdio.h>
2. int fib(int n)
3. {
4.  if (n == 1)
5.  {
6.    return 1;
7.  }
8.  else if (n == 2)
9.  {
10.     return 2;
11.   }
12.   else
13.   {
14.     return fib(n - 1) + fib(n - 2);
15.   }
16. }
17. int main()
18. {
19.   int n = 0;
20.   scanf("%d", &n);
21.   int ret = fib(n);
22.   printf("%d", ret);
23.   return 0;
24. }

思路: 和斐波那契数列类似。

7 小乐乐与序列

老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他   第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)    输出一行,为去重排序后的序列,每个数后面有一个空格。

输入:                                                 输入

4                                                        5

2                                                        5

2                                                         4

1                                                        3

1                                                       2

输出:1 2                                         1

                                                        输出:1 2 3 4 5

代码展示

1. #include <stdio.h>
2. int main()
3. {
4.  int arr[100001] = { 0 };//因为还有一个数字k
5.  int i = 0;
6.  int n = 0;
7.  int k = 0;
8.  scanf("%d", &n);//输入
9.  for (i = 0; i < n; i++)
10.   {
11.     scanf("%d", &k);
12.     arr[k] = k;
13.   }
14.   for (i = 0; i < 100001; i++)
15.   {
16.     if (arr[i] != 0)
17.       printf("%d ", arr[i]);
18.   }
19.   return 0;
20. }

思路:数组,把数字n放到相应的下标n中。既可以去重,又可以排序。

8 小乐乐排电梯

小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层    输入包含一个整数n (0 ≤ n ≤ 109)    输出一个整数,即小乐乐到达楼上需要的时间

代码展示:

1. #include <stdio.h>
2. int main()
3. {
4.  int n = 0;
5.  scanf("%d", &n);
6.  int num = (n / 12) * 4 + 2;
7.  printf("%d", num);
8. }

理解:当轮到小乐乐的时候,仅仅需要2分钟就行,

9 矩阵转置

KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答    第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素                     输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

输入:

2 3

1 2 3

4 5 6

输出:

1 4

2 5

3 6

代码展示:

1. #include <stdio.h>
2. int main()
3. {
4.  int n = 0;
5.  int m = 0;
6.  scanf("%d %d", &n, &m);
7.  int arr[n][m];
8.  int i = 0;
9.  int j = 0;
10.   for (i = 0; i < n; i++)
11.   {
12.     for (j = 0; j < m; j++)
13.     {
14.       scanf("%d", &arr[i][j]);
15.     }
16.   }
17.   for (i = 0; i < m; i++)
18.   {
19.     for (j = 0; j < n; j++)
20.     {
21.       printf("%d ", arr[j][i]);
22.     }
23.     printf("\n");
24.   }
25.   return 0;
26. }

数组名不能用变量,c99除了一个新的概念,变长数组。所以是可以的。

如果编译器不允许,可以用以下代码:

1. #include <stdio.h>
2. int main()
3. {
4.  int arr[10][10] = { 0 };
5.  int n = 0;
6.  int m = 0;
7.  scanf("%d %d", &n, &m);
8.  int i = 0;
9.  int j = 0;
10.   for (i = 0; i < n; i++)
11.   {
12.     for (j = 0; j < m; j++)
13.     {
14.       scanf("%d", &arr[i][j]);
15.     }
16.   }
17.   for (i = 0; i < m; i++)
18.   {
19.     for (j = 0; j < n; j++)
20.     {
21.       printf("%d ", arr[j][i]);
22.     }
23.     printf("\n");
24.   }
25.   return 0;
26. }

10 序列中删除指定数字

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。数据范围:序列长度和序列中的值都满足 1≤n≤501 \le n \le 501≤n≤50

第一行输入一个整数(0≤N≤50)。第二行输入N个整数,输入用空格分隔的N个整数。第三行输入想要进行删除的一个整数。

输出为一行,删除指定数字之后的序列

输入:

6

1 2 3 4 5 9

4

输出:

1 2 3 5 9

代码展示:

1. #include <stdio.h>
2. int main()
3. {
4.  int n = 0;
5.  scanf("%d", &n);
6.  int arr[50] = { 0 };
7.  int i = 0;
8.  for (i = 0; i < n; i++)
9.  {
10.     scanf("%d", &arr[i]);
11.   }
12.   int del = 0;
13.   scanf("%d", &del);
14.   int j = 0;//存放,并打印的数组
15.   for (i = 0; i < n; i++)
16.   {
17.     if (arr[i] != del)
18.     {
19.       arr[j] = arr[i];
20.       j++;
21.     }
22.   }
23.   for (i = 0; i < j; i++)
24.   {
25.     printf("%d ", arr[i]);
26.   }
27.   return 0;
28. }


相关文章
|
前端开发 数据安全/隐私保护
前端传给后端的token是哪里来的?
前端传给后端的token是哪里来的?
1684 0
|
网络协议 Windows
59【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置
【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置
733 0
|
7月前
|
云安全 人工智能 安全
阿里云欧阳欣:AI时代下的安全新范式
阿里云欧阳欣:AI时代下的安全新范式
|
10月前
|
存储 容器
Flutter 构建自适应布局
Flutter 构建自适应布局
272 2
Flutter 构建自适应布局
|
11月前
|
数据采集 Web App开发 监控
捕获抖音截图:如何用Puppeteer保存页面状态
随着抖音直播的兴起,实时动态和互动元素吸引了大量用户。为了捕获直播页面的实时信息,本文介绍了如何使用 Puppeteer 和代理 IP 服务,解决页面动态加载、反爬虫机制等问题,实现自动化抓取和截图保存。通过安装 Puppeteer、配置代理 IP 和编写简单脚本,可以高效地捕获抖音直播页面的状态。
444 51
springboot全局异常处理BasicErrorController和RestControllerAdvice
springboot全局异常处理BasicErrorController和RestControllerAdvice
|
自然语言处理 算法 网络协议
SSL和TLS协议如何提供身份验证、机密性和完整性
SSL 和 TLS 协议使两方能够相互识别和验证,并以机密性和数据完整性进行通信。
883 0
SSL和TLS协议如何提供身份验证、机密性和完整性
阿里云怎么注册商标?(附详细商标注册申请操作流程)
阿里云商标注册分为商标智能注册申请、商标顾问注册申请和商标安心注册申请,本文阿小云以商标智能注册申请为例来详细说下阿里云商标申请图文操作流程:
6318 0
阿里云怎么注册商标?(附详细商标注册申请操作流程)
|
应用服务中间件 nginx
Nginx源码阅读:nginx_shmtx共享互斥锁(进程锁)
Nginx源码阅读:nginx_shmtx共享互斥锁(进程锁)
256 0
|
安全 算法 测试技术
Python后端技术栈(一)
Python后端技术栈(一)