7 条题解

  • 1
    @ 2024-4-6 11:49:09

    STL容器直接套模板

      • #include<bits/stdc++.h>
    • using namespace std;

      #define pb(s) push_back(s)

      int main()

      {

      int n;

      cin>>n;

      vector<int>v;

      while(n--)

      {

      int m;

      cin>>m;

      v.pb(m);

      }

      sort(v.begin(),v.end());

      auto list=unique(v.begin(),v.end());

      v.erase(list,v.end());//删除重复元素

      set<int> s(v.begin(), v.end());

      cout << s.size() << endl;

      for(const auto &num:v)

      cout<<num<<" ";

      cout<<endl;

      return 0;

      }

    • 0
      @ 2025-1-8 13:09:22

      我就不分享代码了。思路利用容器的思想,我只学习了桶排序,所以我分享桶排序的思想:用数组接受所得到的随机数,再通过桶排序(开一个很大的数组,全部为0,如果输入得数和数组下标相同就放进去,并且进行++,一直这样进行,如果数组的值大于1说明有好几个这种数),由小到大排列,但排列完成后输出时,通过在内部一个while循环(也就是,先for循环输出,里面嵌套while看是否有数>1,有的话让它只输出一个即可)看是否有 ,有重复数字的就只输出一个。剩下的数字输出正常输出就行。这就是借助一个容器的思想。当然你也可以采取其他排序,只需要和我的去重思路差不多就行。

      • 0
        @ 2024-10-17 23:51:50

        //肝了一个小时写出来了 #include<stdio.h>

        int main() { int a[888],n,temp,i,j,x; scanf("%d",&n);

        scanf("%d",&a[0]);

        for(i=1;i<n;i++) { scanf("%d",&a[i]);

        } for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(a[i]==a[j])

        { for(x=j;x<n;x++) //借助变量x,删除下标为j的元素,并将j后面的元素全部向前一步。

        { a[x]=a[x+1]; } j--;//j后面的每个元素向前移动1,使后面的元素仍占j位置,j不变 n--; //数据元素总数减一

        } } } printf("%d\n",n); for(i=1;i<n;i++) //冒泡必学的

        { for(j=0;j<n-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(i=0;i<n;i++) { printf("%d\n",a[i]);

        } return 0; } //虽然超时了,但是不能丢分儿

        • 0
          @ 2023-10-7 20:12:18
          
          #include<stdio.h>
          int a[1001];
          int main()
          {   int n;
          	scanf("%d",&n);
          	int tmp;
          	for(int i=1;i<=n;i++)
          	   {
          	   	scanf("%d",&tmp);
          	   	a[tmp]++;
          	   }
          	   int sum=0;
          	   for(int i=1;i<=1000;i++)
          	       {
          	       	if(a[i])
          	       	  {  
          	       	  	sum++;
          			  }
          		   }
          		   printf("%d\n",sum);
          		for(int i=1;i<=1000;i++)
          	       {
          	       	if(a[i])
          	       	  {  
          	       	  	printf("%d ",i);
          			  }
          		   }
          	return 0;
          	   
          }
          
          • 0
            @ 2023-10-5 10:53:01
            #include<stdio.h>
            int main()
            {
                int n;
                scanf("%d",&n);
                int a[1000+5],box[1000+5]={0};
                int cnt=0;
                for(int i=0;i<n;i++){
                    scanf("%d",&a[i]);
                    box[a[i]]++;
                }
                for(int i=0;i<=1005;i++){
                    if(box[i]>0){
                        cnt++;
                    }
                }
                printf("%d\n",cnt-1);
                for(int i=0;i<=1000;i++){
                    if(box[i]>0){
                        printf("%d ",i);
                        
                    }
                }  
                return 0;
            }
            
            • 0
              @ 2023-10-5 10:50:15
              #include <stdio.h>
              #include <iostream>
              #include <set>
              int oi[1100];
              
              using namespace std;
              
              int main()
              {
                  int m;
                  scanf("%d",&m);
                  set<int> st;
                  for (int i=0;i<m;i++)
                  {
                      int pick;
                      scanf("%d",&pick);
                      st.insert(pick);
                  }
                  cout << st.size() << endl;
                  	for(set<int>::iterator it = st.begin(); it != st.end(); it++)
              	{
              		cout << *it <<' ';
              	}
              	
                  return 0;
              }
              
              • 0
                @ 2023-9-28 8:43:54

                分享一位csdn大神的神级脑回路 我愿称之为最强 //这个程序做的事形象点就是:这里有一千个空位置(a[1001]={0}),这一千个位置标号就是从一到一千,然后来N个学生,第一个学生学号是t,t位置肯定是空的(a[t]==0),学生就站过去(这时候a[t]==0),学生t因为第一个来很开心;接下来学生学号b(b<t),就站到b位置,而且站在了学生t的前面,学生t就有些不爽,有一个学生学号c(c>t),就站到c位置,站在了学生t的后面,学生t露出了骄傲的微笑;如果这时候又有一个学号是t的,他位置有人了,就只能悄悄地离开,不留下一片云彩,第一个学生t没什么反应,…。最后看几个位置有人(a[t]! =0)(等于第一个学生t不爽和小骄傲的总次数),然后让他们从小到大报数(输出排序后的随机数)。

                这思路顶礼膜拜!

                #include<stdio.h>
                  int main(){
                      int N,a[1001]={0},t,i;
                      int count=0; 
                     scanf("%d",&N);
                      for(i=0;i<N;i++){
                         scanf("%d",&t);
                          if(a[t]==0){
                              a[t]=t;
                             count++;
                        }
                     }
                     printf("%d\n",count);
                     for(i=0;i<1001;i++){
                         if(a[i]!=0)
                             printf("%d ",a[i]);
                     }
                     return 0;
                 }
                
                • 1

                信息

                ID
                136
                时间
                1000ms
                内存
                128MiB
                难度
                6
                标签
                (无)
                递交数
                1055
                已通过
                300
                上传者