标签:space name nbsp 方法 复杂 简单题 时间 std []
题目一(jobdu1478:三角形的边)、
http://ac.jobdu.com/problem.php?pid=1478
给出三个正整数,计算最小的数加上次小的数与最大的数之差。
题目分析:
简单题。能够用非常多方法解决
AC代码:
#include<iostream>using
namespace std;int
main(){ int
a,b,c,ma; while(cin>>a>>b>>c){ ma=0; if(a==0)
break; if(ma<a) ma=a; if(ma<b) ma=b; if(ma<c) ma=c; cout<<(a+b+c)-2*ma<<endl; } return
0;}
题目二(jobdu1476:平方因子)、
http://ac.jobdu.com/problem.php?pid=1476
给定一个数n,判定它是否有一个不为1的全然平方数因子。也就是说。是否存在某个k。k>1。使得k*k可以整除n。
题目分析:
数字记录全部平方数,在小于n的情况下进行測试就可以。
AC代码:
/** *简单模拟 */#include<iostream>#include<string>using
namespace std;int
main(){ int
n,a[101]; for(int
i=1;i<=100;i++) a[i]=i*i; while(cin>>n&&n){ int
ok=0; for(int
i=2;a[i]<=n;i++){ if(n%a[i]==0){ cout<<"Yes"<<endl; ok=1;//标记是否找到满足条件的数 break; } } if(!ok) cout<<"No"<<endl; } return
0;}对一副扑克牌进行k个移位(shift)和翻转之后(filp),数组结果。
题目分析:
因为题目数据较小。没有必要去优化移位函数(shift)的时间复杂度,仅仅须要普通的移位函数就可以,对于翻转函数,进行折半交换就可以。
AC代码:
#include<iostream>using
namespace std;int
n,k;void
shift(int a[],int
k){//向右循环k次 while(k--){ int
tmp=a[n-1]; for(int
i=n-2;i>=0;i--){ a[i+1]=a[i]; } a[0]=tmp; }}void
filp(int a[],int
n){//翻转数组的前n个数 int
i,j,tmp; for(i=0,j=n-1;i<j;i++,j--){ tmp=a[i]; a[i]=a[j]; a[j]=tmp; }}void
print(int a[]){ for(int
i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;}int
main(){ while(cin>>n>>k&&n){ int
m,a[1005]; for(int
i=0;i<n;i++) a[i]=i+1; //print(a); for(int
i=0;i<k;i++){ cin>>m; shift(a,n-m); //print(a); filp(a,n/2); } print(a); } return
0;}给定一个排列数,算出其二进制表示的后面有多少个连续的零。比方 p(10,5)=30240。
假设用二进制表示为p(10,5)=30240=( 111011000100000)b,也就是说。最后面有5个零。
题目分析:
对于一个数n,n包括(可以整除几个2)几个2,其二进制末尾就有几个0。比方 n=12
12/2=6(0) 6/2=3(0) 3/2=1(1);圆括号中面表示余数,12含有2个2,12的二进制是(1100)。尾部有2个0.
AC代码:
/** *一个数包括几个2,其二进制末尾就有几个0 *比如12=(1100) 12/2=6; 6/2=3,有两个2 */#include<iostream>using
namespace std;int
main(){ int
n,m; while(cin>>n>>m&&n){ int
cnt=0; for(int
i=n;i>=n-m+1;i--){ int
k=i; while(k%2==0){ cnt++; k/=2; } } cout<<cnt<<endl; } return
0;}标签:space name nbsp 方法 复杂 简单题 时间 std []
原文地址:http://www.cnblogs.com/zhchoutai/p/6801500.html