10 条题解

  • 10
    @ 2023-7-14 12:31:48

    解析

    用num[i]表示i出现的次数。

    1. 寻找最大值maxn
    2. 统计每个数出现次数
    3. 输出0~maxn中,每个数出现次数

    题解

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int num[10005], a[10005], maxn;
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        maxn = -1;
        for (int i = 1; i <= n; i++)
            maxn = max(maxn, a[i]);
        for (int i = 1; i <= n; i++)
            num[a[i]]++;
        for (int i = 0; i <= maxn; i++)
            cout << num[i] << endl;
        return 0;
    }
    
    • @ 2023-7-18 21:43:33

      其实一号和三号循环可以写成一个

  • 1
    @ 2023-7-18 21:38:48

    最大数到0等于整个数组!

    #include<bits/stdc++.h>
    using namespace std;
    long long w[10001],q[10001],n;
    int main()
    {
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>q[i];
            w[q[i]]++;
        }
        for(int i=10000;i>=0;i--)if(w[i]!=0)
            {
                n=i;
                break;
            }
        for(int i=0;i<=n;i++)cout<<w[i]<<endl;
        return 0;
    }
    
    • 1
      @ 2023-7-14 14:49:21
      #include <iostream>
      using namespace std;
      int s[10005];
      int main()
      {
          int a,maxn=-1;
          cin>>a;
          for (int i=1;i<=a;i++)
          {
              cin>>s[i];
          }
          for (int i=1;i<=a;i++)
          {
              if (s[i]>maxn)
              {
                  maxn=s[i];
              }
          }
          for (int i=0;i<=maxn;i++)
          {
              int sum=0;
              for(int j=1;j<=a;j++)
              {
                  if (s[j]==i) sum+=1;
              }
              cout<<sum<<endl;
          }
          return 0;
      }//笨笨的做法
      
    • 0
      @ 2024-4-19 18:29:33
      #include<iostream>
      using namespace std;
      int main()
      {
          int n,maxa=0;
          cin >> n;
          int a[n];
          for(int i=0;i<n;i++)
          {
              cin >> a[i];//循环输入
              if (a[i]>=maxa)//判断是否大于最大值
              {
                  maxa=a[i];//更新最大值
              }
          }
          for(int i=0;i<=maxa;i++)//计算0~maxa的出现次数
          {
              int x=0;
              for(int j=0;j<n;j++)
              {
                  if (a[j]==i)
                  {
                      x++;
                  }
              }
              cout << x << endl;
          }
          return 0;
      }
      
      • 0
        @ 2023-11-21 20:59:10
        #include <iostream>
        using namespace std;
        int main()
        {
            int max , a[10000] , n , sum = 0;
            cin >> n;
            for(int i = 0;i < n;i++)
            {
                cin >> a[i];
            }
            max = a[0];
            for(int i = 1;i < n;i++)
            {
                if(a[i] > max)
                {
                    max = a[i];
                }
            }
            for(int i = 0;i <= max;i++)
            {
                for(int j = 0;j < n;j++)
                {
                    if(a[j] == i)
                    {
                        sum++;
                    }
                }
                cout << sum << endl;
                sum = 0;
            }
            return 0;
        }
        
        • 0
          @ 2023-7-15 11:59:28

          这个题的主要思路是先找出最大值,**用一个辅助的cnt[]数组统计出每个数字在他相应的位置出现了几次,这里的关键代码为: f[i]表示这n个元素,1就在他在cnt[]数组里对应的cnt[1]++,5就在cnt[5]++,以此类推。 然后我们直接输出cnt[]1~max值里面的数值就可以了

          注意,这个题因为要统计0的次数,所以循环条件一定从0开始,而最后输出的时候max值的次数也要输出,所以边界为i<=maxn `

          #include<iostream>
          #include<cstdio>
          #define N 10010
          #define rg register
          #define ll long long
          using namespace std;
          int n;
          int f[N];
          inline void read(int &x){
          	int f=1;
          	char ch=getchar();
          	x=0;
          	while(ch<'0'||ch>'9'){
          		if(ch=='-') f=-1;
          		ch=getchar();
          	}
          	while(ch>='0'&&ch<='9'){
          		x=x*10+ch-'0';
          		ch=getchar();
          	}
          	x*=f;
          }
          int maxn=0xc0c0c0c0;
          int cnt[N];
          int main(){
          	read(n);
          	for(rg int i=0;i<n;i++){
          		read(f[i]);
          		if(f[i]>maxn) maxn=f[i];
          	}
          	for(rg int i=0;i<n;i++){
          		cnt[f[i]]++;
          	}
          	for(rg int i=0;i<=maxn;i++) printf("%d\n",cnt[i]);
          	return 0;
          }
          
          • -1
            @ 2023-7-28 16:15:53
            #include<bits/stdc++.h>
            using namespace std;
            int main()
            {
                int n,a[10005],num=0;
                cin>>n; 
                for(int i = 1;i<=n;i++)cin>>a[i];
                sort(a+1,a+n+1);//排序
                for(int i =0;i<=a[n];i++)//获取0至最大数
                {
                    for(int j =1;j<=n;j++)
                        if(a[j]==i)//判断,如果是就加一
                            num++;
                    cout<<num<<endl;//输出
                    num=0;//再初始化,开始下一轮的计数
                }
                return 0;
            }//感觉思路挺简洁的哈
            
            • -2
              @ 2023-7-14 16:37:05
              #include <bits/stdc++.h>
              using namespace std;
              int num[114514], a[1919810], maxn;//这么臭(划掉)烂(划掉)简单的代码还有必要放吗
              int main()
              {
                  int n;
                  cin >> n;
                  for (int i = 1; i <= n; i++)
                      cin >> a[i];
                  maxn = -1;
                  for (int i = 1; i <= n; i++)
                      maxn = max(maxn, a[i]);
                  for (int i = 1; i <= n; i++)
                      num[a[i]]++;
                  for (int i = 0; i <= maxn; i++)
                      cout << num[i] << endl;
                  return 0;
              }
              
              
            • -2
              @ 2023-7-14 15:35:11

              思路写在代码里面了qwq

              #include<bits/stdc++.h>
              using namespace std;
              int bok[10005]; // bak数组,用于存储数据
              int main()
              {
              /*
              思路:
              先输入,再把输入值对应bak项自增,利用maxn来获取较大值,最后输出
              */
              int n,maxn=-1;
              cin >> n;
              int a[n];
              for(int i = 0;i < n;i++){
              cin >> a[i]; // 输入值
              bak[a[i]]++; // 自增
              if(a[i] > naxn)maxn = a[i];// 最大值判定
              }for(int i = 0;i <= maxn;i++)cout << bak[i] << endl; // 根据最大值输出
              return 0;
              }
              
              • @ 2023-7-14 16:21:21

                万能头小心C++98头文件(我被坑过)

            • -4
              @ 2023-7-15 12:32:28

              解析

              用count[i]表示i出现的次数。

              1. 循环输入n个数放入数组中,并找到最大数寻找最大值maxn。
              2. 统计每个数的出现的次数存入Count数组相同下标对应元素中。
              3. 循环Count数组,输出每个数出现次数。

              题解

              🚀️ 🚀️ 😄 😄 🎉️ 🎉️

              #include <iostream>
              using namespace std;
              int count[10005],a[10005], n,maxn = -1;
              int main()
              {
                 cin >> n;
                 //循环输入n个数放入数组,并找到最大数。
                 for (int i = 1; i <= n; i++)
                 {
                    cin >> a[i];      
                    if(a[i]>maxn) maxn = a[i];   
                 }
                 //循环数组的n个数,统计每个数的出现的次数存入Count数组相同下标对应元素中。
                 for (int i = 1;i <= n;i++)
                    count[a[i]]++;
                 //循环Count数组,输出统计结果。
                 for (int i = 0;i <= maxn;i++)
                    cout << count[i]<< endl;
              return 0; 
              }
              
              • 1

              信息

              ID
              292
              时间
              1000ms
              内存
              256MiB
              难度
              5
              标签
              递交数
              1669
              已通过
              609
              上传者