目录
-
- 找出两个集合中相同的数
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;
}