前言:今天是咱们第十一期刷牛客网上的题目。
目标:能使用数组来解决问题。
鸡汤:一张纸对折就能站立。先干为敬,大家随意。
后面的几道题都类似,只要大家掌握好打印星号的方法就行
#include
int main()
{
//初始化
int input = 0;
int i = 0;
int j = 0;
int k = 0;
while ((scanf("%d", &input)) != EOF)
{
for (i = 0; i < input; i++)
{
for (j = 0; j < input; j++)
{
//判断
if (i == 0 || i == input - 1 || j == 0 || j == input - 1)
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
#include
int main()
{
int n = 0;
//多组输入
while ((scanf(" %d", &n)) != EOF)
{
//控制行
for (int i = 0; i < n; i++)
{
//控制列
for (int j = 0; j < n; j++)
{
//控制打印
if (i == n - 1 || j == 0 || i == j)
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
这里和杨辉三角的打印很相似,写完这到题目可以去写写杨辉三角。
#include
int main()
{
int n = 0;
//多组输入
while ((scanf("%d", &n)) != EOF)
{
//控制行数
for (int i = 1; i <= n; i++)
{
//打印一行
for (int j = 1; j <= i; j++)
{
printf("%d ", j);
}
printf("\n");
}
}
return 0;
}
#include
int main()
{
//初始化
int a, i, j;
//输入
scanf("%d", &a);
//d为开始的前面的空格数
int d = 3 * a;
for (i = 0; i < a; i++)
{
for (j = d - 1; j > 0; j--)
printf(" ");
for (j = 0; j < i + 1; j++)
printf("* ");//5个空格
printf("\n"); //打印第一行
for (j = d - 2; j > 0; j--)
printf(" ");
for (j = 0; j < i + 1; j++)
printf("* * "); //* *和三个空格组成控制
printf("\n"); //打印第二行
for (j = d - 3; j > 0; j--)
printf(" ");
for (j = 0; j < i + 1; j++)
printf("* * * ");
printf("\n"); //打印第三行
d -= 3;
}
for (i = 0; i < a; i++)
{
for (j = 0; j < 3 * a - 1; j++)
printf(" ");
printf("*\n");
}
return 0;
}
这道题真的恶心人,希望大家能耐心敲完这道题。
#include
#include
int main()
{
char arr[800][800] = { 0 };
int n = 0;
scanf("%d", &n);
int y = 3*pow(2,n-1)-1;//y表示顶点在第一行的下标值
arr[0][y] = '*';
arr[1][y-1] = '*';
arr[1][y+1] = '*';
arr[2][y-2] = '*';
arr[2][y+2] = '*';
arr[2][y] = '*';
//第一次循环,将[最上面的最小的三角形]赋值到对应其[左下的三角形]位置和[右下的三角形]位置
//如果有第二次循环,则将由[三个小三角形构成的三角形]赋值到左下和右下。
for (int i = 1; i < n; i++)//n表示复制n-1次
{
int rang = (3 * pow(2, i - 1) - 1);
for (int x1 = 0; x1 <= rang; x1++)
{
for (int y1 = y - rang; y1 <= y + rang; y1++)
{
arr[x1 + rang + 1][y1 - rang - 1] = arr[x1][y1];
}
}
for (int x1 = 0; x1 <= rang; x1++)
{
for (int y1 = y - rang; y1 <= y + rang; y1++)
{
arr[x1 + rang + 1][y1 + rang + 1] = arr[x1][y1];
}
}
}
//打印树叶
for (int i = 0; i <= 3 * pow(2, n-1)-1; i++)
{
for (int j = 0; j <= 3 * pow(2, n) - 2; j++)
{
if (arr[i][j] == '*')
printf("%c", arr[i][j]);
else
printf(" ");
}
printf("\n");
}
//打印树干
for (int i = 0; i < n; i++)
{
for (int j = 0; j < y; j++)
printf(" ");
printf("*\n");
}
return 0;
}
#include
int main()
{
//初始化
int n = 0;
int x = 0;
//输入
scanf("%d %d",&n,&x);
int i = 0;
int count = 0;
//循环
for(i = 1;i <= n;i++)
{
//这里防止i改变
int m = i;
while(m)
{
if(m % 10 == x)
{
count++;
}
m /= 10;
}
}
//输出
printf("%d\n",count);
return 0;
}
当然这里可以采用逆序法,这里用了一些技巧。
#include
int main()
{
//定义数组
int arr[10] = {0};
//输入
for(int i = 0;i <= 9;i++)
{
scanf("%d",&arr[i]);
}
//逆序
for(int i = 9;i >= 0;i--)
{
printf("%d ",arr[i]);
}
return 0;
}
#include
int main()
{
//初始化
int N = 0;
int num = 0;
int sum = 0;
//输入
scanf("%d",&N);
for(int i = 0;i < N;i++)
{
scanf("%d",&num);
//统计
sum = sum + num;
}
printf("%d\n",sum);
return 0;
}
#include
int main()
{
//初始化
int arr[101] = {0};
int n = 0;
//输入
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
//定义最大值,最小值
int max = arr[0];
int min = arr[0];
for(int i = 0;i < n;i++)
{
if(arr[i] > max)
max = arr[i];
if(arr[i] < min)
min = arr[i];
}
int sum = max - min;
printf("%d\n",sum);
return 0;
}
#include
int main()
{
int arr[40] = { 0 };
int num = 0;
scanf("%d", &num);//输入几名
for (int k = 0; k <= num; k++)
{ //输入成绩
scanf("%d", &arr[k]);
}
int temp = 0;
for (int i = 0; i < num; i++)
{ //第i位为最大数
for (int j =i+1; j<num; j++)
{ //从第i+1位开始遍历剩余数
if (arr[j] > arr[i])
{ //存在大于最大数的数
temp = arr[i];//把最大数和比较数进行交换
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int k = 0; k < 5; k++)
printf("%d ", arr[k]);
return 0;
}
今天的刷题内容就到这里啦,如果上面的题目你有更优的解法,请打在下面的评论区中,独乐乐不如众乐乐。麻烦大家举起自己的小手,给博主三连,有你们的支持就是我最大的动力。预知后事如何,且听下回分解。