弥补第一次天梯赛遗憾

目录

    • 找出两个集合中相同的数
      7-23 找出两个集合中相同的数 (25分)
      给定两个正整数的集合,分别含有m个和n个元素,找出在两个集合中都出现过的数并输出。
      输入格式:
      第一行输入两个整数m和n,分别表示两个集合中的整数的个数。 第二行输入m个用空格隔开的整数,表示第一个集合中的元素。 第三行输入n个用空格隔开的整数,表示第二个集合中的元素。 保证n和m的值均不超过50000,且集合中所有元素的值大于0且小于等于1000。
      输出格式:
      找出在两个集合中都有正整数,并按从小到大的顺序输出,每个数后有一个空格。
      输入样例:
      5 6
      2 9 10 7 19
      22 10 5 6 7 1
      输出样例:
      在这里给出相应的输出。例如:
      7 10
       
    • #include <iostream>
      #include<cmath>
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      int v[1005];
      int k[1005];
      int main()
      {
        int a,b;
        int n,m,i,j;
        cin>>n>>m;
        for(i=0;i<n;i++)
        {
            cin>>a;
            v[a]=1;
        }
        for(j=0;j<m;j++)
        {
            cin>>b;
            k[b]=1;
        }
        for(i=1;i<=1000;i++)
        {
            if(v[i]==1&&k[i]==1)
            {
                cout<<i<<" ";
            }
        }
      }
       

输入一个字符串转换成十进制整数
7-24 输入一个字符串转换成十进制整数 (25分)
输入一个字符串,它可能是2–16进制数中一种进制数的表示,计算它对应的10进制数可能的最小值。例如,“151”可以是6–16进制中任何一种进制数的表示。 对应的10进制数可能的最小值就是67,也就是把它当成6进制。
输入格式:
输入一行字符串,仅由‘0’–‘9’和‘A’–'F’这些字符组成,保证转换后对应的10进制数在int范围内。
输出格式:
输出一个整数,为字符串对应10进制数可能的最小值。
输入样例:
213
输出样例:
39

根据题意要尽可能将字符串当成最小的进制
我们知道2进制中只有0,1而3进制中只有0,1,2所以可以访问字符串中出现的最大的字符 求其对应的最小进制 再转化为10进制即可
 

 #include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int zh(string s,int k)//将k进制转化为10进制
{
   int res=0;
   int a;
   int len=s.size();
   for(int i=0;i<len;i++)
   {
       if(s[i]>='0'&&s[i]<='9') a=s[i]-'0';
       else if(s[i]>='A'&&s[i]<='F') a=s[i]-'A'+10;
       res=res*k+a;
   }
   return res;
}
int main()
{
  string s;//C语言用char s[100];
  cin>>s;//可以用gets(s);
  char m;
  int i,k,sum;
  int len=s.size();//求字符串的长度
  m=s[0];
  for(i=0;i<len;i++)
  {
      if(s[i]>m)
        m=s[i];//找到最大的字符
  }
  //cout<<m<<endl;
  if(m>='0'&&m<='9')
     k=m-'0'+1;
  if(m>='A'&&m<='F')//10进制以上出现A等字符 特殊处理
     k=m-'A'+11;
    //cout<<k<<"*"<<endl;
    sum=zh(s,k);
    cout<<sum;
}

一维数组的褶子 
在一个整型的一维数组中,如果在遍历数组的过程中发生递增变递减或递减变递增,我们认为这是一维数组的一个褶子。给定一个整型的一维数组,请你判断有几个褶子。
输入格式:
多实例测试,第一行输入一个整数T(0<T<10),表示有T组测试数据。 每组测试数据有二行,第一行输入一个整数n(0<n<100), 表示一维数组元素的个数; 第二行输入n个整数,用空格隔开。
输出格式:
对应每个测试实例,在一行中输出一个整数,表示一维数组中褶子的个数。

#include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
      int n,i,c=0,flag=0;
      int a[105]={0};
      cin>>n;
      for(i=0;i<n;i++)
        cin>>a[i];
     int k=a[0];
     int ans=0;
     if(a[1]>=k)c=1;
     if(a[1]<=k)c=-1;
      for(i=1;i<n;i++)
      {
         if(a[i]!=k)
         {
             if(a[i]>k)
             flag=1;
             if(a[i]<k)
             flag=-1;
             if(c!=flag)
             ans++;
             k=a[i];
            c=flag;
         }
      }
      cout<<ans<<endl;
  }
}
不一样的人生密码
7-26 不一样的人生密码 (25分)
每个人都有一个人生密码,只有两个人的人生密码相同,才能走到一起,给出n个人的人生密码,n是奇数,其中只有一个人的人生密码是单独的,其它都是成对的,请你找出不成对的那一个。
输入格式:
多实例测试,每行第一个数为n(1<=n<=1000000),后面有n个正整数,表示n个人的人生密码 。 n值为0表示输入结束。
输出格式:
输出那个不成对的人生密码。
输入样例:
3 8 9 8
5 120 10 120 10 85
0
输出样例:
在这里给出相应的输出。例如:
9
85
#include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[10000000];
int ff(int n,int a[])
{
    int t=0;
    for(int i=0;i<n;i++)
    t^=a[i];
    return t;
}
int main()
{
  int n;
  while(scanf("%d",&n),n!=0)
  {
      int ans;
      for(int i=0;i<n;i++)
      scanf("%d",&a[i]);
      ans=ff(n,a);
      printf("%d\n",ans);
  }
  return 0;
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值