数组概念题目精选

简介: 数组概念题目精选

一. 字符串逆序

数据范围:1≤len(str)≤10000


输入描述:

输入一个字符串,可以有空格


输出描述:

输出逆序的字符串


首先分析题目 要求逆序字符串 并不是反向打印 这就要求我们改变字符串的内容


按照题目的意思我们可以设计两个指针 一个指针指向最左边 一个指向最右边 (‘\0’)之前 然后使用这两


个指针再加上一个临时变量把他们的顺序调换一下就可以啦


代码如下


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
  char arr[10000] = "";
  gets(arr);
  char tmp = 0;
  char* left = arr;
  char *right = &arr[(strlen(arr) - 1)];
  while (right>left)
  {
    tmp = *right;
    *right = *left;
    *left = tmp;
    left++;
    right--;
  }
  int i = 0;
  for ( i = 0; i < strlen(arr); i++)
  {
    printf("%c",arr[i]);
  }
  return 0;
}


几个易错点需要注意


第一 不能使用scanf而要使用gets()

因为scanf遇到空格会自动停止 从而导致后面的内容输入不进去


第二 不能重头轻尾 最后的printf的格式要写对 博主因为写出算法太激动 导致后面printf写错好几次

第三 最后的for循环使用strlen才可以打印出数组的全部内容 记得不要使用 strlen(arr)-1


二. 打印菱形


题目分析 菱形可以分成上下两部分来打印

我们首先分析上半部分

feda8982a8284c5aa1311c7554b7a6c5.png

我们假设这个图形有i行


那么它每一行就具有2i -1个


我们来打印看试试


int main()
{
  int line = 0;
  scanf("%d", &line);
  for ( int i = 1; i <= line; i++)
  {
    int j = 0;
    for ( j = 1; j <=2*i-1 ; j++)
    {
      printf("*");
    }
  }
  return 0;
}

d6aff7393b9543af90e3440e2d1ab83f.png


我们发现 咦 忘记换行了 稍微改进下


36416bcb30f44c1aa2139d3389e411e6.png


我们发现 加上换行之变成这样子了 虽然星星的个数没错但是没有控制它们的位置


我们再观察图形


我们假设第1行有line个空格的 最后一行没有空格的话 那么 每一行的空格数就是line -i


23a5cb373de8482688a4fc0885345b34.png


这样子就能完美打印上半部分的菱形啦


那完美再来看下半部分


假设有line行 那么第一行就有2*line -1个


第i行就有(2line-1)- 2(i -1)


假设第一行没有空格 那么第i行的空格就是i个


代码实现如下


  for (int i = 1; i <= line; i++)
  {
    int j = 0;
    for (j = 1; j <= i-1; j++)
    {
      printf(" ");
    }
    for (j = 1; j <= ((2 * line)-1)-2*(i-1); j++)
    {
      printf("*");
    }
    printf("\n");
  }


打印出来就是这样子


c4dfeadf4a4640ada26b535fd4082214.png


然后我们再将下方的第一行取消掉


// 下半部分
  for (int i = 2; i <= line; i++)


这样就可以完美实现啦


910cfacd911242f097a82533d99fa8a8.png


几个易错点需要注意


这道题目的主要难点是想到将整个菱形一分为二 并且控制每一行的空格和星号 想明白每一行有多少就可以


三. 打印水仙花数


求出0~100000之间的所有“水仙花数”并输出。


“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个“水仙花数”。


还是首先分析题目

各位数字的n次方之和

这就要求我们求出这是个几位数

并且求出它的每一位数

之后经过简单的计算就可以啦


判断几位数


  tmp = x;
  while(tmp)
  {
    count++;
    tmp /= 10;
  }


求出各位数字的n次方之和


  while (tmp)
  {
    int ret = 0;
    ret = pow(tmp % 10, count);
    sum += ret;
  /*  sum += pow(tmp % 10, count);*/
    tmp/= 10;
  }


判断


  if (x==sum)
  {
    return 1;
  }
  else
  {
    return 0;
  }


完整代码如下


int is_Nu(int x)
{
  int count = 0;
  int tmp = 0;
  tmp = x;
  while(tmp)
  {
    count++;
    tmp /= 10;
  }
  // 计算出了count 几位数
  int sum = 0;
  // 计算每一位数的count次方
  tmp = x;
  while (tmp)
  {
    int ret = 0;
    ret = pow(tmp % 10, count);
    sum += ret;
  /*  sum += pow(tmp % 10, count);*/
    tmp/= 10;
  }
  if (x==sum)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
int main()
{
  int i;
  for ( i = 0; i <=100000; i++)
  {
    if (is_Nu(i)==1)
    {
      printf("%d ", i);
    }
  }
}


几个易错点需要注意


这里需要注意的是x的值可能再函数内部起变化

而我们不想它变化 这个时候就需要使用一个中间变量tmp来代替进行一些计算


四. 计算求和


求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,


例如:2+22+222+2222+22222


题目分析

一共有n项数 每一项数字的结构是i个a

那么我们可以获取两个数字 n a

再用这两个数字构造每一项 就可以得到最终的和了


int main()
{
  int a = 0;
  int n = 0;
  int i = 0;
  int sum = 0;
  int tmp = 0;
  scanf("%d%d", &a, &n);
  for(i=0; i<n; i++)
  {
    tmp = tmp*10+a;
    sum += tmp;
  }
  printf("%d\n", sum);
  return 0;
}


代码如上


几个易错点需要注意


这里要注意的和第三题一样要注意a的值不能改变 所以要使用一个tmp来接受a的值


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
6月前
|
存储 移动开发 算法
技术笔记:pintia_L1_20题目集合
技术笔记:pintia_L1_20题目集合
44 0
|
编译器 C语言 开发者
掌握指针和数组:经典笔试题攻略(万字详解)(上)
掌握指针和数组:经典笔试题攻略(万字详解)(上)
56 0
|
存储 人工智能 Serverless
基础编程题目集 函数题部分(上)
基础编程题目集 函数题部分
174 0
|
缓存 算法 C语言
【数据结构与算法篇】栈与队列(详解)附加Leetcode经典笔试题
【数据结构与算法篇】栈与队列(详解)附加Leetcode经典笔试题
72 0
|
存储 编译器 C语言
掌握指针和数组:经典笔试题攻略(万字详解)(下)
掌握指针和数组:经典笔试题攻略(万字详解)(下)
79 0
|
机器学习/深度学习 存储 人工智能
基础编程题目集 函数题部分(下)
基础编程题目集 函数题部分(下)
359 0
数据结构一个小白的练级之路【链表的分割】题目参考
数据结构一个小白的练级之路【链表的分割】题目参考
|
C语言
C · 进阶 | 指针和数组超细节笔试题解析
- 指针和数组结合在一起历来是`C语言`里面的难点,细节多如牛毛,今天博主就专门出一篇文章领略一下,专门总结了几乎所有细节部分,让我们开启沉浸式练习 - 本系列分两个板块,前半部分直接上题,后半部分会有相应的解析
486 0
C · 进阶 | 指针和数组超细节笔试题解析
|
存储 算法 Go
算法入门很简单:链表题套路及精选题目(上)
链表(Linked List):一种线性表数据结构。它使用一组任意的存储单元(可以是连续的,也可以是不连续的),来存储一组具有相同类型的数据。
算法入门很简单:链表题套路及精选题目(上)
|
存储 算法 编译器
C · 初阶 | 数组?看一遍就够了
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
114 0
C · 初阶 | 数组?看一遍就够了