二维数组pic[4][4]
{0 1 1 0
1 0 1 1
1 1 0 1
0 0 0 1}表示一4x4的二值图像,1表示白色像素,0表示黑色像素,编写程序,输出白色像素最多的行号和列号。(数量相同的输出最小行和列号。对于本题示例,输出结果为行号:2,列号:4)
#include <iostream>
using namespace std;
int main() {
int pic[4][4] = {{0, 1, 1, 0}, {1, 0, 1, 1}, {1, 1, 0, 1}, {0, 0, 0, 1}};
int row[4] = {0}, col[4] = {0}; // 初始化为0
// 统计每行每列的白色像素数量
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (pic[i][j] == 1) {
row[i]++;
col[j]++;
}
}
}
// 找出行列白色像素数量最大值
int max_row = 0, max_col = 0;
for (int i = 1; i < 4; i++) {
if (row[i] > row[max_row])
max_row = i;
if (col[i] > col[max_col])
max_col = i;
}
// 输出结果
cout << "行号:" << max_row+1 << ",列号:" << max_col+1 << endl;
return 0;
}
要求:只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
char password[20] = { 0 };
int flag = 0;
for (i = 1; i < 4; i++)
{
printf("请输入密码:");
scanf("%s", password);//数组名就是地址
if (password == "123456")
{
printf("登录成功\n");
flag == 1;
break;
}
else
{
printf("第%d次密码错误\n", i);
}
}
if (flag == 0)
{
printf("三次密码均输入错误,退出程序\n");
}
return 0;
}
这代码看似没毛病,其实运行起来却和我们想象的不太一样
我假设的密码不就是123456,为什么还是提醒我密码错误了呢?
原因很简单,判断两个字符串是否相等,要使用strcmp函数,不能直接使用”==“,同时,这个函数会接收一个返回值,
如果第一个字符串小于第二个字符串,返回<0的数字。(它们比的是ASCII)
如果第一个字符串大于第二个字符串,返回>0的数字。
如果第一个字符串等于第二个字符串,返回==0。
所以最后正确的代码在下面:
#include <stdio.h>
int main()
{
int i = 0;
char password[20] = { 0 };//字符串数组,可以存放字符串
int flag = 0;
for (i = 1; i < 4; i++)
{
printf("请输入密码:");
scanf("%s", password); //数组名本质就是地址,所以不需要取地址
if (strcmp(password,"123456") == 0)
{
printf("登录成功\n");
flag = 1;
break;
}
else
{
printf("第%d次密码错误\n", i);
}
}
if (flag == 0)
{
printf("三次密码均输入错误,退出程序\n");
}
return 0;
}