0x1
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,i,j,t;
while (cin>>a&&a)
{
int b[a];
i=0;
while (i<a)
cin>>b[i++];
for(i=0; i<a; i++)
for (j=0; j<a-i-1; j++)
{
if (abs(b[j])<abs(b[j+1]))
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
for(i=0; i<a-1; i++)
cout<<b[i]<<" ";
cout<<b[i]<<'\n';
}
return 0;
}
0X2
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
#include <stdio.h>
int main()
{
int n, x, a[100], i, j;
while(scanf("%d%d",&n,&x)&&(n||x)) //这个的意思是当输入0 0时结束的
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(x<a[i])
break;
}
for(j=0;j<i;j++)
printf("%d ",a[j]);
printf("%d",x);
for(j=i;j<n;j++)
printf(" %d",a[j]);
printf("\n");
}
return 0;
}
0x3
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
#include <stdio.h>
#include <string.h>
int main()
{
char a[100];
int n,i,j,k,d;
scanf("%d",&n);
while(n--)
{
scanf("%s",a);
d=strlen(a);
for(i=0,j=0;i<d;i++)
{
if(a[i]>='0'&&a[i]<='9')
j++;
}
printf("%d\n",j);
}
return 0;
}
0x4
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
#include <iostream>
using namespace std;
int main()
{
int n,s[100],mix,i,j,k,x,temp;
while(cin>>n&&n!=0)
{
for(i=1; i<=n; i++)
{
cin>>s[i];
}
mix=s[1];
for(i=1; i<=n; i++)
{
if(s[i]<=mix)
{
mix=s[i];
x=i;
}
temp=s[1];
s[1]=mix;
s[x]=temp;
cout<<s[1];
for(i=2; i<=n; i++)
{
cout<<s[i]<<" ";
}
cout<<endl;
}
return 0;
}
}
0x5
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
#include<stdio.h>
int main()
{
int n,m,i,sum,num;
while(scanf("%d %d",&n,&m)!=EOF)
{
num=0;sum=0;
for(i=2;i<=n*2;i+=2)
{
sum+=i;
num++;
if(num==m&&(i!=n*2))
{
printf("%d ",sum/num);
num-=m;
sum=0;
}
}
if(sum==0&&num==0) continue;
printf("%d\n",sum/num);
}
}
0x6
给定三条边,请你判断一下能不能组成一个三角形。
Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;
Output
对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
double a[4];
int i,n;
cin>>n;
while(n--)
{
for(i=1; i<=3; ++i)//这里的++i很关键。数组从第二个元素输入
{
cin>>a[i];
}
sort(a+1,a+4);
if(a[1]+a[2]>a[3] && a[3]-a[2]<a[1])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
0x7
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
#include <iostream>
using namespace std;
int sum(int num)
{
int i;
int sum=0;
for(i=1;i<num;i++)
{
if(num%i==0)
sum+=i;
}
return sum;
}
int main()
{
int i,a,b,n,k;
cin>>n;
for(i=1; i<=n; i++)
{
cin>>a>>b;
k=sum(a);
if(k==b)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
0x8
输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。
#include <iostream>
using namespace std;
int main() {
int a[10];
int i,k,j;
for(i=0;i<20;i++){
cin>>a[i];
}
for(i=0;i<20;i++){
k=i;
a[k]=a[i];
for(j=0;j<20;j++){
if(k==j)
continue;
else
{
if(a[k]%a[j]==0){
cout<<a[k]<<endl;
break;
}
}
}
}
return 0;
}
0x9
若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。
#include <iostream>
using namespace std;
#交换数字
int reverse(int x)
{
int num = 0;
while(x != 0)
{
num = x%10 +num*10;
x = x/10;
}
return num;
}
#判断回文数
int judge(int x)
{
if(x==reverse(x))
return 1;
else
return 0;
}
int main()
{
int L, M;
cin >> L;
while(L--)
{
cin >> M;
int cnt = 0;
while(cnt <= 8)
{
if(!judge(M))
{
M = M +reverse(M);
cnt++;
}
else
{
cout << cnt << endl;
break;
}
}
if(cnt > 8)
{
cout << 0 << endl;
}
}
return 0;
}
除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://cloud.tencent.com/developer/article/1176112