5.异常细胞检测(简单)
描述
我们拍摄的一张CT照片用一个二维数组来存储,假设数组中的每个点代表一个细胞。每个细胞的颜色用0到255之间(包括0和255)的一个整数表示。我们定义一个细胞是异常细胞,如果这个细胞的颜色值比它上下左右4个细胞的颜色值都小50以上(包括50)。数组边缘上的细胞我们不检测。现在我们的任务是,给定一个存储CT照片的二维数组,写程序统计照片中异常细胞的数目。
输入
第一行包含一个整数N(100>=N>2).
下面有 N 行,每行有 N 个0~255之间的整数,整数之间用空格隔开。
输出
输出只有一行,包含一个整数,为异常细胞的数目。
#include <iostream>
using namespace std;
int main()
{
int n,i,j;
cin >> n;
int s[100][100];
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> s[i][j];
int num = 0,a1,a2,a3,a4;//a1a2a3a4存差值,num存异常细胞数
for (i = 1; i < n; i++) { //从1开始
for (j = 1; j < n; j++) {
a1 = s[i - 1][j] - s[i][j];
a2 = s[i + 1][j] - s[i][j];
a3 = s[i][j - 1] - s[i][j];
a4 = s[i][j + 1] - s[i][j];
if (a1 >= 50 && a2 >= 50 && a3 >= 50 && a4 >= 50)num += 1;
}
}
cout << num << endl;
return 0;
}
6.循环移动(出错几次,但不难,稍微注意下)
描述
给定一组整数,要求利用数组把这组数保存起来,再利用指针实现对数组中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m各数变为最前面的m各数。
注意,不要用先输出后m个数,再输出前n-m个数的方法实现,也不要用两个数组的方式实现。
要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。
输入
输入有两行:第一行包含一个正整数n和一个正整数m,第二行包含n个正整数。每两个正整数中间用一个空格分开。
输出
输出有一行:经过循环移动后数组中整数的顺序依次输出,每两个整数之间用空格分隔。
#include <iostream>
using namespace std;
int main()
{
int n,m;
int s[100];
cin >> n>>m;
int i, j, temp;
for (i = 0; i < n; i++)cin >> s[i];
for (i = 0; i < m; i++) {
temp = s[n - 1];
for (j = n-1; j >= 0 ; j--)//在这里出错几次,注意下循环后移从n-1开始,j--,从0开始会出错》。
s[j + 1] = s[j];
s[0] = temp;
}
for (i = 0; i < n; i++)cout << s[i]<<' ';
cout << endl;
return 0;
}
7.中位数(调试时候错了好几次,提交还错了2次,注意下)
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)
输入
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1 <= N <= 15000.
接着N行为N个数据的输入,N=0时结束输入
输出
输出中位数,每一组测试数据输出一行
#include <iostream>
using namespace std;
int main()
{
int n,pre,hou,num,i;
int output;
while (cin >> n && n != 0) { //实现多组输入
int s[15000] = { 0 }; //测试的时候把这个放到while外面导致出错,s[i]存i的个数
for (i = 0; i < n; i++) {
cin >> num;
s[num]++;
}//先存数
int pos = n / 2 + 1;
//从前往后的n/2+1位加上从后往前的n/2+1位再除以2就是中位数,不论奇数个数还是偶数个数
for (pre = 0, i = 0; pre < pos; i++) {
pre += s[i];
}
int prenum = i;
for (hou = 0, i = 14999; hou < pos; i--) {
hou += s[i];
}
int hounum = i;
cout << (prenum + hounum) / 2 << endl;
}
return 0;
}
浪费空间和时间..但是代码短,好写
其他实现到算法那里再看
8.校门外的树(有意思的题,不难)
描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入
输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
#include <iostream>
using namespace std;
//由于区域有重合,所以考虑用数组赋0或1来表示有树没树
int main()
{
int l, m;
cin >> l >> m;
int tree[10000] = { 0 };
int i = 0,sta,fin;
for (i = 0; i <= l; i++)
tree[i] = 1;
for (i = 0; i < m; i++) {
cin >> sta >> fin;
for (int j = sta; j <= fin; j++)
tree[j] = 0;
}
int sum = 0;
for (i = 0; i <= l; i++)
if (tree[i])
sum++;
cout << sum << endl;
return 0;
}
17.5.29,week10结束,剩个期末考了.