“微软蓝屏”事件暴露了网络安全哪些问题?
近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件,源于美国电脑安全技术公司“众击”提供的一个带有“缺陷”的软件更新,它如同一颗隐形炸弹,在全球范围内引爆,导致近850万台设备遭遇故障,横跨航空、医疗、传媒等众多关键行业,甚至造成美国超过2.3万架次航班延误,其影响之广令人震惊。面对如此大规模的系统中断,网络安全与系统稳定性的讨论再次被推上风口浪尖。如何构建更加稳固和安全的网络环境?在网络安全和系统稳定性方面我们仍面临着严峻考验。快来分享你的观点吧!不论是问题解析、建议提出还是展示你所在领域中预防类似事件的有效实践,每一篇真知灼见都是对网络安全领域的宝贵贡献。
文章目录
正文
1. 【计数器|数中还有指定数字的个数】编写程序数一下 1到 100 的所有整数中出现多少个数字9
【分析】
在1-100的所有整数中有多少个数字含有9 。
9可以出现在 个位数 以及 十位数 上
出现在 个位数 19 取它的余数,余数为9 可以说明个位数含有9 19 % 10 = 9
十位数 除以10得出的商中含有9 可以判断十位数是9 90 / 10 = 9
#include <stdio.h> /** * 在1-100的所有整数中有多少个数字含有9 * 【分析 】 * 9可以出现在 个位数 以及 十位数 上 * 出现在 个位数 19 取它的余数,余数为9 可以说明个位数含有9 19 % 10 = 9 * 十位数 除以10得出的商中含有9 可以判断十位数是9 90 / 10 = 9 * @return */ int main() { int count = 0, i; for (i = 1; i <= 100; i++) { if (i % 10 == 9) { count++; } if (i / 10 == 9) { count++; } } printf("Hello, World! total number : %d\n", count); return 0; }
2.【乘法口诀表】在屏幕上输出9*9乘法口诀表
【分析】
#include <stdio.h>
/**
* 99乘法表
* @return
*/
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++) {
// printf("%d * %d = %d ", i, j, i * j);
printf("%d * %d = %-2d ", j, i, i * j);
}
printf("\n");
}
printf("Hello, World!\n");
return 0;
}
3. 【猜数字游戏】简单的猜数字游戏
【分析】
要求:以猜1-100之间的数字为例。
输入: 猜测的数字,eg: 66
输出:若猜大了,输出“bigger”;反之,输出“smaller”;
说明: 游戏可以无限玩耍
首先,制作出一个简单明了的菜单页面。例如:
int command;
do {
printf("======================\n");
printf(" Bulls and Cows \n "
"======================"
"please enter number 1 that means the game begins!"
"(if u enter 0 that means out): ");
scanf("%d", &command);
switch (command) {
case 1:
game();
break;
case 0:
printf("game is over!");
break;
default:
printf("Error, please enter again!");
}
} while (command);
主体实现
srand((unsigned int) time(NULL));
int number = rand() % 100 + 1;
int guess = 0;
while (1) {
printf("please enter guess a number in [1,100]: ");
scanf("%d", &guess);
if (guess < number) {
printf("smaller!\n");;
} else if (guess > number) {
printf("bigger!\n");
} else {
printf("Congratulations!\n");
printf("This round of game is over,"
"and the next round of games is about to begin.\n");
printf("======================\n");
break;
}
}
汇总
#include <stdio.h>
//#include <time.h>
#include <stdlib.h>
/**
*
* Bulls and Cows
*
*
* @return
*/
void game();
void menu();
int main() {
printf("Hello, World!\n");
menu();
return 0;
}
/**
* menu
*/
void menu() {
int command;
do {
// printf("======================\n");
printf(" Bulls and Cows \n "
"======================"
"please enter number 1 that means the game begins!"
"(if u enter 0 that means out): ");
scanf("%d", &command);
switch (command) {
case 1:
game();
/// break;
case 0:
printf("game is over!");
break;
default:
printf("Error, please enter again!");
}
} while (command);
}
/**
* rand函数
* <stdlib.h> 中定义的函数,用于生成伪随机数,默认情况下,它生成从 0 到 RAND_MAX 的伪随机数,其中 RAND_MAX 是一个常数,通常是 32767。
* int rand(void);
*
*/
void game() {
// srand((unsigned int) time(NULL));
int number = rand() % 100 + 1;
int guess = 0;
while (1) {
printf("please enter guess a number in [1,100]: ");
scanf("%d", &guess);
if (guess < number) {
printf("smaller!\n");;
} else if (guess > number) {
printf("bigger!\n");
} else {
printf("Congratulations!\n");
printf("This round of game is over,"
"and the next round of games is about to begin.\n");
printf("======================\n");
break;
}
}
}
4.【最值】求10 个整数中最大值
分析】
#include <stdio.h>
/**
* 求10 个整数中最大值
*
* 分析
* 逐个比较, 先把第一个当作是MAX最大值,拿它和其他人逐一比较,每次把最大值赋值给MAX
* 从而最终选出MAX
*
*/
int main() {
int arr[] = {10, 6, 9, 36, 211, 985, 666, 96, 86, 98}, max;
for (int i = 0; i < 10; ++i) {
max = arr[0];
if (max <= arr[i]) {
max = arr[i];
}
}
printf("max value is %d \n", max);
printf("Hello, World!\n");
return 0;
}
5. 【分数求和】计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
分析】
/*#include <stdio.h>
*//**
* [分数求和]
* 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
* 【分析】
*
* @return
*//*
int main() {
double sum = 0.0;
for (int i = 1; i <= 100; ++i) {
if (i % 2 == 0) {
i = -i;
// printf("i= %d\n", i);
}
// 细节
// sum += 1 / i;
sum += 1.0 / i;
if (i % 2 == 0) {
i = -i;
// printf("i= %d\n", i);
}
}
printf("sum of point is %lf.\n", sum);
printf("Hello, World!\n");
return 0;
}*/
#include <stdio.h>
/**
* [分数求和]
* 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
* 【分析】
*
* 【方法二】 使用 flag ,乘以 1 -1 循环变化
**/
int main() {
double sum = 0.0;
int flag = 1;
for (int i = 1; i < 100; ++i) {
sum += 1.0 / i * flag;
flag = -flag;
}
printf("sum of point is %lf.\n", sum);
return 0;
}
6. 【打印素数】 打印100~200之间的素数
分析】
素数,又称质数。
除了1和它本身外,不能被其他的整数整除的数。
方案/方法一: 暴力破解法
要想得知某数i 是否为素质,使用 [2,(i-1)]内的整数整除i,若能被整除则不是;反之,则是素数。
该方法实施可行,但速度较慢,效率低。
方案/方法二:巧用除以二,进行暴力破解
要想得知某数i 是否为素质,使用 [2,i/2]内的整数整除i,之所以使用[2,i/2],是因为i/2,是可以通过乘以2获得。若能被整除则不是;反之,则是素数。
同样的,该方法实施可行,速度略有提高,但依然可以优化。
方案三: 巧用平方根
方案三实现代码如下:
#include <stdio.h>
#include <math.h>
/**
* print prime numbers
* 100-200
* @return
*/
int main() {
int count = 0, i, j;
for (i = 100; i <= 200; ++i) {
for (j = 2; j <= sqrt(i) * 1.0; ++j) {
// for (j = 2; j <= sqrt(i); ++j) {
// printf("%d \n", j);
if (0 == i % j) {
break;
}
}
if (j > sqrt(i)) {
count++;
printf("%d ", i);
}
/*if (0 == count % 7) {
printf("\n");
}*/
}
printf("the number of prime number in [100,200]: %d\n", count);
printf("Hello, World!\n");
return 0;
}
【判断素数】
题目名称: 函数判断素数
题目内容: 实现一个函数is_prime,判断一个数是不是素数。
利用上面实现的is_prime函数,打印100到200之间的素数。
1
#include <stdio.h>
#include <math.h>
/**
* 判断素数
* @param num
* @return
*/
int is_prime(int num);
int main() {
int num;
scanf("%d", &num);
if(is_prime(num)) {
printf("%d is prime \n",num);
} else {
printf("%d isn't prime \n",num);
}
return 0;
}
/**
* 判断素数
* @param num
* @return 0 1
*/
int is_prime(int num) {
int i;
// 0 1 不是素数
if (num < 1) {
return 0;
}
int sqrt_num = (int) sqrt(num);
for (i = 2; i <= sqrt_num; ++i) {
if (0 == num % i) {
return 0;
}
}
return 1;
}
2
// 素数
#include <stdio.h>
#include <math.h>
/**
* 判断素数
* @param num
* @return
*/
int is_prime(int num);
int main() {
for (int i = 100; i < 200; ++i) {
if (is_prime(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
/**
* 判断素数
* @param num
* @return 0 1
*/
int is_prime(int num) {
int i;
// 0 1 不是素数
if (num < 1) {
return 0;
}
int sqrt_num = (int) sqrt(num);
for (i = 2; i <= sqrt_num; ++i) {
if (0 == num % i) {
return 0;
}
}
return 1;
}
【素数 nowcoder】BC162 牛牛的素数判断
【素数】(BC162 牛牛的素数判断)
#include <stdio.h>
#include "math.h"
int main() {
int n, i, j, num;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &num);
for (j = 2; j < sqrt(num) * 1.0; j++) {
if (0 == num % j) {
printf("false\n");
break;
}
}
if (j > sqrt(num)) {
printf("true\n");
}
}
return 0;
}
核心抓住,素数怎么判断
总结: 还是要心细,细心!
7. 【打印闰年】 打印1000年到2000年之间的闰年
分析】
【判断闰年 】 判断 - BC55 判断闰年
描述
判断一个整数n是否是闰年
输入描述:
输入一个整数n (
1
≤
n
≤
2018
1≤n≤2018)
输出描述:
是闰年输出"yes" 否则输出"no"
非整数年 : 能被4整除,却不能被100整除
整数年: 能被400整除的年份
#include <stdio.h>
int main() {
int year;
scanf("%d",&year);
if (0==year%4&&0!=year%100 || 0 == year%400) {
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}
改进/替换
#include <stdio.h>
int main() {
int year;
scanf("%d",&year);
// if (0==year%4&&0!=year%100 || 0 == year%400) {
// printf("yes\n");
// } else {
// printf("no\n");
// }
// 经过优化还可以使用条件运算符
// 注意这里是字符串 用 双引号 "yes":"no"
printf(((0==year%4&& 0 != year % 100 )||( 0==year%400))?"yes":"no");
return 0;
}
8. 【最大公约数】给定两个数,求这两个数的最大公约数
分析】
最大公约数是指 两个或者多个整数共有约数中最大的那一个。
又称最大公因数,最大公因子 。
两个整数的最大公约数是能够同时整除它们的最大的正整数。
约数 是什么?
能够整除一个数的正整数。 【又称因数。】
整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
相关概念:
- 如果一个数c既是数a的因数,又是数b的因数,那么c叫做a与b的公因数。
- 两个数的公因数中最大的一个,叫做这两个数的最大公因数。
- 约数,也叫因数。
【解决方法】
**1. 辗转相除法**
辗转相除法,又称为**欧几里得算法**。
是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
原理:
- 两个整数的最大公约数 等于 其中较小的数 和 两数 相除余数 的最大公约数。【(1)百度百科】
具体做法/实现方式:
- 较大数除以较小数,得出 余数1;
- 上一个算式中的除数(较小的数)除以 余数1,得出余数2;
- 余数1 除以 余数2 ;
- 以上步骤,如此反复,直到余数为0为止。 那么最后的算式中的 除数 就是 这两个数的最大公约数。
最后,将数学算法的步骤转化为程序步骤即可
《实现》
代码算法实现
#include <stdio.h>
/**
* 【最大公因数】求两数中的最大公因数
*
* 【分析】
* 因数/约数是什么
* 最大的公因数是什么
*
* 【解决方法】
* 1.辗转相除法【欧几里得算法】
* 2. 更相减损法
* 3. 短除法......
*
*
* @return
*/
int main() {
// 辗转相除法
int num1 = 18, num2 = 36, remainder = num1 % num2;
while (remainder != 0) {
num1 = num2;
num2 = remainder;
remainder = num1 % num2;
}
// printf("The Greateset common divisor of two number is : %d\n",remainder);
// 细节 细心;弄懂 原理
printf("The Greateset common divisor of two number is : %d\n",num2);
printf("Hello, World!\n");
return 0;
}
- 更相减损法
- 短除法
9. 【交换两数】使用自定义函数进行交换两数。
分析】
用到了指针
#include <stdio.h>
/**
*
* 两数交换
*/
int swap(int *a, int *b);
int main() {
int a = 211, b = 985;
swap(&a, &b);
printf("a = %d, b = %d \n", a, b);
printf("Hello, World!\n");
return 0;
}
/**
* 交换数字
* @param a
* @param b
* @return
*/
int swap(int *a, int *b) {
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
return 0;
}
10 . 【】
分析】