C语言算法题
有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%。有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下1秒的时间内马上游出探测器的范围,还是安全的。现在给出s和x的数据,请你判断小鱼会不会有危险?如果有危险输出’y’,没有危险输出’n’。
//感谢黄小U饮品完善题意
输入格式 一行内输入两个实数,用空格分隔,表示s和x。均不大于100
输出格式 一行内输出’y’或者’n’表示小鱼是否会有危险。
输入输出样例 输入 #1
复制
14 1 输出 #1
复制
n
#include<stdio.h>
#include<math.h>
int main()
{
int s,x,i;
double m=0.0;
scanf("%d %d",&s,&x);
for(i=1;;i++)
{
m = m + 7 * pow(0.98,i-1);
if(m > (s-x))
{
m = m + 7 * pow(0.98,i);
if(m > (s+x))
{
printf("n");
break;
}
else
{
printf("y");
break;
}
}
}
return 0;
}
这个题不难,我自己做完之后还是看了一些题解。。。然后就人清差距了,下面是某题解答案:
#include <stdio.h>
#include <math.h>
int main()
{
double s, x, t;
scanf("%lf %lf", &s, &x);
t = log((s+x-350)/(s-x-350))/log(0.98);
printf("%c\n", t < 1 ? 'n' : 'y');
return 0;
}
题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式 一个整数 NNN
输出格式 一个整数,表示反转后的新数。
输入输出样例 输入 #1
复制
123 输出 #1
复制
321输入 #2
复制
-380 输出 #2
复制
-83 说明/提示 数据范围
−1,000,000,000≤N≤1,000,000,000-1,000,000,000≤N≤1,000,000,000 −1,000,000,000≤N≤1,000,000,000。
noip2011普及组第一题
#include<stdio.h>
#include<string.h>
int main()
{
char a[99];
int b,i,j;
scanf("%s",a);
for( i = 97; i > 0; i--)
{
if( a[i] == '0' && a[i+1] == '\0')
a[i] = '\0';
j = strlen(a);
}
if(a[0]=='-')
for(i=1;i<=j/2;i++)
{
b=a[i];
a[i]=a[j-i];
a[j-i]=b;
}
else
for(i=0;i<j/2;i++)
{
b=a[i];
a[i]=a[j-i-1];
a[j-i-1]=b;
}
puts(a);
return 0;
}
题理解很简单,但实现还是比较繁琐的。
题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 nnn 张地毯,编号从 111 到 nnn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。输入格式输入共 n+2n + 2n+2 行。第一行,一个整数 nnn,表示总共有 nnn 张地毯。接下来的 nnn 行中,第 i+1i+1i+1 行表示编号 iii 的地毯的信息,包含四个正整数 a,b,g,ka ,b ,g ,ka,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b)(a, b)(a,b) 以及地毯在 xxx 轴和 yyy 轴方向的长度。第 n+2n + 2n+2 行包含两个正整数 xxx 和 yyy,表示所求的地面的点的坐标 (x,y)(x, y)(x,y)。输出格式输出共 111 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出 -1。输入输出样例输入 #1 复制 3
1 0 2 3
0 2 3 3
2 1 3 3
2 2
输出 #1 复制 3
输入 #2 复制 3
1 0 2 3
0 2 3 3
2 1 3 3
4 5输出 #2 复制 -1
#include<stdio.h>
#define N 10000
int a[N], b[N], g[N], k[N];
int main()
{
int n, x, y;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d%d%d%d", &a[i], &b[i], &g[i], &k[i]);
}
scanf("%d%d", &x, &y);
int ans = -1;
for(int i = 0; i < n; i++)
{
if(x >= a[i] && y >= b[i] && x <= a[i] + g[i] && y <= b[i] + k[i])
{
ans = i + 1;
}
}
printf("%d\n", ans);
return 0;
}
SQL学习
SQL简介
SQL 指结构化查询语言
SQL 使我们有能力访问数据库
SQL 是一种 ANSI 的标准计算机语言
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
SQL SELECT 语句
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法
SELECT 列名称 FROM 表名称
以及:
SELECT * FROM 表名称
* 是选取所有列的快捷方式。
注释:SQL 语句对大小写不敏感。SELECT 等效于 select。
SQL SELECT DISTINCT 语句
在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围 |
LIKE | 搜索某种模式 |
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
web安全
SQL注入
注入基础知识
万能密码是典型的SQL注入;
注入基本分为:
数字型和字符型,数字型无需闭合引号,字符型需闭合引号;
常见的注入叫法:
POST注入:注入字段在POST数据中;
Cookie注入:注入字段在Cookie数据中;
延时注入:使用数据库延时特性注入;
搜索注入:注入处为搜索的地点;
base64注入:注入字符串需要经过base64加密;
查询的方式:不同的数据库通常有不同的注入方法,但原理基本相似。
1.表或列来提取信息
2.利用数据类型转换错误提取信息
3.从数据库系统视图获取源数据
4.order by、union、having等语句
5.数据库提供的函数
6.动态执行语句
SQL注入的原理:
SQL注入漏洞形成的原因就是:用户输入的数据被SQL解释器执行。
1.参数用户可控:前端传给后端的参数内容是用户可以控制的。
2.参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。
SQL手工注入基本方法
1.判断是否能够注入
'
and 1=1
and 1=2
2.order by 判断列数
3.union select 回显
4.数据库名
select schema_name from information_schema.schemata limit 0,1
5.数据表
select table_name from information_schema.tables where table_schema=( select database()) limit 0,1
6.字段
select column_name from information_schema.columns where table_name='xxx' limit 0,1
7.内容
select xxx from table.column limit 0,1