第一道题:矩阵相等判定_牛客题霸_牛客网 (nowcoder.com)
创建m,n变量,传入数组arr[m][n]代表数组下标:
int m=0,n=0;
int arr[m][n];
scanf("%d",&arr[m][n]);
但是实际上vs不支持柔性数组(我用的vs),如果创建arr[m][n]的话只会显示数组下标不能用变量
所以我们干脆创建一个大概范围的数组:
intint arr1[100][100] = { 0 };
然后用一个for循环,通过i,j输入二维数组的每一个元素
int i=0,j=0;
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr1[i][j]);
printf("%d",arr[i][j);
}printf("\n");
}
目前的代码就是这样:
int main()
{
int i=0,j=0;
int m=0,n=0;
int arr1[100][100];
printf("请输入行和列:");
scanf("%d",&m,&n);
printf("请输入数组:");
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr1[i][j]);
printf("%d", arr1[i][j]);
}printf("\n");
}
return 0;
}
运行结果:
同样的,再创建第二个数组,输入第二个数组的元素,打印输出看看。
printf("请输入第二组数组:\n");
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr2[i][j]);
printf("%d\n", arr2[i][j]);
}printf("\n");
}
然后我们就需要判断arr1和arr2数组下标是否相同:
for (i= 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
if(arr1[i][j]==arr2[i][j])
{
printf("yes");
}
else
{
printf("no");
}
}printf("\n");
}
但是我们发现no打印了4次,那是因为因为打印函数也在for循环里,我们需要把它抽出来。
用count变量。如果下标相同的元素的值不同,coun就++,最后if语句判断count==0,就代表两个数组下表值都相同,就打印yes
for (i= 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
if(arr1[i][j] != arr2[i][j])
{
count++;
}
}
}
if(count == 0)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
但是我们把代码放进牛客网测试:
我们把所有文本提示删除掉:
格式对了,但是超了:
这是因为我们数组的大小没有要求的那么大:
我们把数组大小从int改成long long:
或者用柔性数组:
使用柔性数组显示错误:
因为我们要把scanf("%d%d",&m,&n);放在柔性数组上面,这样才能把我们输入的m,n的值传给柔性数组。
如果显示格式错误:
修改一下格式,不该换行时不要换行,然后运行:
详细代码:
#include <stdio.h>
int main() {
int m = 0, n = 0;
long long arr1[100][100] = { 0 };
long long arr2[100][100] = { 0 };
int i = 0;
int j = 0;
int q=0;
int u=0;
int count=0;
printf("请输入两个数字:");
scanf("%d%d", &m, &n);
//把arr的每个数组元素都打印输出
printf("请输入一组数组:\n");
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr1[i][j]);
}printf("\n");
}
printf("请输入第二组数组:\n");
for (i = 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &arr2[i][j]);
}printf("\n");
}
for (i= 0; i <m; i++)
{
for (j = 0; j <n; j++)
{
if(arr1[i][j] != arr2[i][j])
{
count++;
}
}
}
if(count == 0)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
第二题:序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)
先二分查找找到n值,再删除它(把它后面的数向前覆盖)
int jude(int* arr, int sz, int n)
{
//数组首元素地址
int left = 0;
int right = sz - 1;
int mid = left + right / 2;
while (left <= right)
{
if (n > arr[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else if (n < arr[mid])
{
right = mid - 1;
mid = (left + right) / 2;
}
return mid;
}
return -1;
}
int main()
{
int tmp = 0;
int i = 0;
int n = 0;
int mid= 0;
printf("请输入要查找的数:");
scanf("%d", &n);
int arr[5] = { 1,2,3,4,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
mid=jude(arr, sz, n);
for (int i = mid; i < 4; i++)
{
arr[i] = arr[i + 1];
}
for (i = 0; i < 4; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
第三题:获得月份天数_牛客题霸_牛客网 (nowcoder.com)
#include <stdio.h>
int main() {
// 判断一年有多少天,首先要判断是不是闰年,是闰年的话(四年一闰&&百年不闰)||四百年一闰
// 如果判断了是不是闰年那么闰年的二月份有29天,不是闰年的2月有28天。
// 平时月份1 3 5 7 8 10 12 有31天
// 其余的 4 6 6 9 11有30天
int year = 0;
int i = 1;
int month = 0;
while (scanf("%d%d", &year, &month) != EOF) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
if (month == 2) {
printf("29\n");
}
} else {
if (month == 2) {
printf("28\n");
}
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month == 12) {
printf("31\n");
} else {
if (month != 2)
printf("30\n");
}
}
return 0;
}
第四道题:网购_牛客题霸_牛客网 (nowcoder.com)
#include <stdio.h>
int main() {
double price = 0;
int month = 0;
int day = 0;
int discounts = 0;
while (scanf("%lf %d %d %d", &price, &month, &day, &discounts) != EOF) {
if (month == 11 && day == 11) {
price = price * 0.7;
}
else {
if (month == 12 && day == 12)
price = price * 0.8;
}
if (discounts == 1) {
price -= 50;
if(price>0.00)
{
printf("%.2lf", price);
}
else {
printf("0.00");
}
} else {
printf("%.2lf", price);
}
}
return 0;
}