1001 害死人不偿命的(3n+1)猜想 (15 分)
按题意进行操作即可
#include
using namespace std;
#define LL long long int
int main()
{
int n,res=0;
scanf("%d",&n);
while(n!=1)
{
if(n&1)
n=(3*n+1)/2;
else n/=2;
res++;
}
printf("%d\n",res);
return 0;
}
1002 写出这个数 (20 分)
由于结果最大为900左右,所以也可直接求出个十百位然后输出。
#include
using namespace std;
#define LL long long int
char c[110];
string s[11]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
cin>>c;
int res=0;
for(int i=0;c[i];i++)
res+=c[i]-'0';
int x=1;
while(x<=res) x*=10;
x/=10;
int p=0;
while(x)
{
if(p++) cout<<" ";
cout<<s[res/x];
res%=x;x/=10;
}
return 0;
}
1003 我要通过! (20 分)
题意一直没弄清楚。
总而言之第一部分判断是字符串只能出现‘P’‘A’‘T’三个英文字母且三个字母都要出现还有就是‘P’、‘T’仅出现1次,第二部分判断结合条件2、3,通过“如果‘aPbTc’是正确的,那么‘aPbATca’也是正确的”该句话可得出‘P’前面‘A’的数量乘以‘P’‘T’中间的‘A’的数量必须要等于‘T’后面‘A’的数量。(条件2是条件3的特殊情况)
#include
using namespace std;
#define LL long long int
char c[110];
int main()
{
int n;
cin>>n;
while(n--)
{
cin>>c;
int lenc=strlen(c);
int p=0,a=0,t=0,s=0;
for(int i=0;c[i];i++)
{
if(c[i]=='P') p++;
else if(c[i]=='A') a++;
else if(c[i]=='T') t++;
else {s=1;break;}
}
if(!s&&p==1&&t==1&&a)
{
int l=0,r=0;a=0;
for(int i=0;c[i];i++)
{
if(c[i]=='P') {p=0;continue;}
if(c[i]=='T') {t=0;continue;}
if(p) l++;
if(!p&&t) a++;
if(!t) r++;
}
if(l*a==r) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}
1004 成绩排名 (20 分)
结构体排序
#include
using namespace std;
#define LL long long int
int n;
struct node
{
string name,num;
int sc;
}s[1010];
bool cmp(node a,node b)
{
return a.sc<b.sc;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>s[i].name>>s[i].num>>s[i].sc;
sort(s,s+n,cmp);
cout<<s[n-1].name<<" "<<s[n-1].num<<endl;
cout<<s[0].name<<" "<<s[0].num<<endl;
return 0;
}
1005 继续(3n+1)猜想 (25 分)
日常看不懂题意。
找出哪些数是当前这些数进行计算时覆盖不到的即可。
#include
using namespace std;
#define LL long long int
int n;
int s[110];
bool vis[110];
bool cmp(int a,int b){return a>b;}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i];
int x=s[i];
while(x!=1)
{
if(x&1) x=(x*3+1)>>1;
else x>>=1;
if(x<=100) vis[x]=1;
}
}
int p=0;
sort(s,s+n,cmp);
for(int i=0;i<n;i++)
{
if(!vis[s[i]])
{
if(p++) cout<<" ";
cout<<s[i];
}
}
cout<<endl;
return 0;
}
1006 换个格式输出整数 (15 分)
直接输出即可
#include
using namespace std;
#define LL long long int
int num,a,b,c;
int main()
{
cin>>num;
a=num/100;
b=num/10%10;
c=num%10;
if(a)
for(int i=1;i<=a;i++)
cout<<"B";
if(b)
for(int i=1;i<=b;i++)
cout<<"S";
if(c)
for(int i=1;i<=c;i++)
cout<<i;
cout<<endl;
return 0;
}
1007 素数对猜想 (20 分)
暴力计算
#include
using namespace std;
#define LL long long int
int n;
bool prime(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
int main()
{
cin>>n;
int res=0;
for(int i=5;i<=n;i+=2)
{
if(prime(i)&&prime(i-2))
res++;
}
cout<<res<<endl;
return 0;
}
1008 数组元素循环右移问题 (20 分)
直接输出即可,m要对n取余。
#include
using namespace std;
#define LL long long int
int n,m;
int s[110];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>s[i];
int p=0;
m%=n;
for(int i=0;i<n;i++)
{
if(p++) cout<<" ";
cout<<s[(n-m+i)%n];
}
cout<<endl;
return 0;
}
1009 说反话 (20 分)
遇到空格输出字段即可,此处不支持gets(),可使用cin.get(char*,size)。
#include
using namespace std;
#define LL long long int
char c[110];
int main()
{
cin.get(c,100);
int x;
int len=strlen(c);
for(int i=len-1;i>=0;i--)
{
if(c[i]==' ')
{
x=i+1;
while(x<len&&c[x]!=' ')
cout<<c[x++];
cout<<' ';
}
}
x=0;
while(x<len&&c[x]!=' ')
cout<<c[x++];
cout<<endl;
return 0;
}
1010 一元多项式求导 (25 分)
将系数与指数相乘输出即可,特殊判断零多项式的情况。
#include
using namespace std;
#define LL long long int
int a[1010];
int b[1010];
int main()
{
int cmp=0;
while(cin>>a[cmp]>>b[cmp])cmp++;
int p=0;
for(int i=0;i<cmp;i++)
{
if(b[i])
{
if(p++) cout<<" ";
cout<<a[i]*b[i]<<" "<<b[i]-1;
}
}
if(!p) cout<<"0 0"<<endl;
return 0;
}
1011 A+B 和 C (15 分)
直接输入比较即可,这道题应该是考察数据范围,用一下long long int 就可以了
#include
#include
using namespace std;
#define LL long long int
int T;
LL a,b,c;
int main()
{
cin>>T;
int cs=0;
while(T--)
{
cin>>a>>b>>c;
if(a+b>c)
printf("Case #%d: true\n",++cs);
else
printf("Case #%d: false\n",++cs);
}
return 0;
}
1012 数字分类 (20 分)
直接按照题意做就好了,刚开始看到题目中数据都为正整数,所以初始化所有结果为-1,结果最后一组样例过不了。想了一下因为A2有加有减,可能最后结果同样为-1,导致结果出错。就又设了一个变量记录A2是否存在,将结果的初始化改为初始化为0,这样是对的。
#include
#include
#include
#include
using namespace std;
#define LL long long int
int n,k;
int a[9];
int main()
{
while(cin>>n)
{
int cmp=1;
int cnt=0;
bool flag=0;
memset(a,0,sizeof(a));
while(n--)
{
cin>>k;
if(k%5==0&&k%2==0)
a[1]+=k;
if(k%5==1)
a[2]+=cmp*k,cmp*=-1,flag=1;
if(k%5==2)
a[3]++;
if(k%5==3)
a[4]+=k,cnt++;
if(k%5==4&&k>a[5])
a[5]=k;
}
int p=0;
for(int i=1;i<=5;i++)
{
if(p++) printf(" ");
if(i==2)
{
if(flag)
printf("%d",a[i]);
else printf("N");
}
else if(i==4)
{
if(a[i])
printf("%.1f",a[i]*1.0/cnt);
else printf("N");
}
else
{
if(a[i])
printf("%d",a[i]);
else printf("N");
}
}
}
return 0;
}
未完待续