复杂度
时间复杂度:算法需要执行基本运算(加减乘除)次数所处的等级。
O(1)< O(logn)< O(n) < O(n^2)
空间复杂度 :和时间复杂度写法相同,表示算法发需要消耗的最大数据空间。
考虑到空间一般够用,因此常常采用以空间换时间的策略,例如散列法。
黑盒测试
系统后台会准备若干组数据,让提交的程序去运行这些数据。
1.单点测试
系统会判断每组数据的输出结果是否正确。
2.多点测试
要求程序能一次运行所有的数据
(1)while...EOF型
如果题目没有给定输入的结束条件,那么就默认取读到文件末尾。
scanf的返回值为其读入的参数个数,正常的控制台中输入只有在到达文件末尾无法取读 才会读入失败,此时scan的返回值是-1,C语言中使用EOF(End Of File)来表示-1。
while(scanf(“%d”,&n)!=EOF){
....
}
若想在黑框里手动触发EOF,可以按<ctrl+Z>再按<Enter>就可以结束while了。
输入字符串的两种:
while(scanf("%s",str)!=EOF{
...
}
while(gets(str)!=NULL){
...
}
(2)while...break型
当输入的数据满足某个条件时停止输入。
例:当输入的两个a和b都为零时停止输入
#include<stdio.h>
int main(){
int a,b;
while(scanf("%d%d",&a,&b),a||b){
printf("%d\n",a+b);
}
return 0;
}
(3)while(T--)
给定了测试数据的组数T
#include<stdio.h>
int main(){
int T,a,b;
scanf("%d",&T);
while(T--){
scanf("%d%d",&a&b);
printf("%d",a+b);
}
return 0;
}
常见的三种输出类型
(1)正常输出
(2)每组输出之后都额外加一个空行
#include<stdio.h>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n",a+b);
printf("\n");
}
return 0;
}
(3)两组输出数据之间有一个空行,最后一组数据后面,没有空行
#include<stdio.h>
int main(){
int T,n,a;
scanf("%d",&T);
while(T--){
int sum = 0;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&a);
sum = sum+a;
}
printf("%d\n",sum);
if(T>0) printf("\n");
}
return 0;
}
输出一行N个整数,每两个整数用空格隔开,最后一个整数后面不允许加上空格
for(int i= 0;i<N ; i++){
printf("%d",a[i]);
if(i<N-1) printf(" ");
else printf("\n");
}