目录
2008
题目
思路
直接统计正负0的个数即可
代码
#include<iostream>
using namespace std;
int n,f,l,z;
double num;
signed main(){
while(cin>>n){
f=0;l=0;z=0;
if(n==0) break;
for(int i=0;i<n;i++){
cin>>num;
if(num>0) z++;
else if(num==0) l++;
else f++;
}
cout<<f<<" "<<l<<" "<<z<<endl;
}
return 0;
}
2009
题目
思路
简单的数学问题,sqrt直接计算即可,别忘了保留小数。
代码
#include<iostream>
#include<math.h>
using namespace std;
int m;
double sum,n;
int main(){
while(cin>>n>>m){
sum=0;
for(int i=0;i<m;i++){
sum+=n;
n=sqrt(n);
}
printf("%.2lf\n",sum);
}
return 0;
}
2010
题目
思路
题目中的数据只有三位数,所以可以将100-999中所有的水仙花数都找出来再对照即可
代码
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
int g,s,b,n,m;
vector<int> a;
bool check(int a){
g=a%10;
s=a/10%10;
b=a/100;
if(pow(g,3)+pow(s,3)+pow(b,3)==a){
return true;
}
return false;
}
void all_num(){
for(int i=100;i<=999;i++){
if(check(i)) {
a.push_back(i);
}
}
}
int main(){
all_num();
while(cin>>m>>n){
int cnt=0;
for(int i=0;i<a.size();i++){
if(a[i]>=m&&a[i]<=n) {
cout<<a[i]<<" ";
cnt++;
}
}
if(cnt==0) cout<<"no"<<endl;
}
return 0;
}
2011
题目
思路
这道题的解法就多了,可以直接一个循环判断奇偶进行加减操作,也可以分开计算,正数和-负数和,我这里是第二种方法。
代码
#include<iostream>
using namespace std;
int n;
double z,f,num,sum;
int main(){
cin>>n;
for(int i=0;i<n;i++){
sum=0;
f=0,z=0;
cin>>num;
for(int j=2;j<=num;j+=2){
f+=1.0/j;
}
for(int j=1;j<=num;j+=2){
z+=1.0/j;
}
//cout<<f<<" "<<z<<endl;
printf("%.2lf\n",z-f);
}
return 0;
}
2012
题目
思路
判断运算后的数是否是素数即可
代码
#include<iostream>
using namespace std;
int x,y,num,cnt;
bool prime(int num){
if(num<=1) return false;
else{
for(int i=2;i*i<=num;i++){
if(num%i==0) return false;
}
}
return true;
}
int main(){
while(cin>>x>>y){
cnt=0;
if(x==0 && y==0) break;
for(int i=x;i<=y;i++){
num=i*i+i+41;
//cout<<num<<" ";
if(prime(num)) cnt++;
//cout<<cnt<<" ";
}
if(cnt==y-x+1) cout<<"OK"<<endl;
else cout<<"Sorry"<<endl;
}
return 0;
}
2039
题目
思路
三角形的定义,任意两边之和大于第三边
注:题目中说的是正数,并不一定都是正整数,还有浮点数
代码
#include<iostream>
#include <algorithm>
using namespace std;
double n;
double sjx[3];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>sjx[0]>>sjx[1]>>sjx[2];
sort(sjx,sjx+3);
if(sjx[0]+sjx[1]>sjx[2] && sjx[0]+sjx[2]>sjx[1] && sjx[1]+sjx[2]>sjx[0]){
cout<<"YES";
}else cout<<"NO";
if(i!=n-1) cout<<endl;
}
return 0;
}
1720
题目
思路
十六进制数与十进制数的相互转换
注:十六进制数的输入是%x;
代码
法一,自定义函数进行转换
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int change_num(string aa){
int l=aa.size();
int ans=0;
for(int i=0;i<l;i++){
if(aa[i]>='0' && aa[i]<='9'){
ans+=(aa[i]-'0')*pow(16,l-i-1);
}
else if(aa[i]>='a' && aa[i]<='f'){
ans+=(aa[i]-'a'+10)*pow(16,l-i-1);
}
else if(aa[i]>='A' && aa[i]<='F'){
ans+=(aa[i]-'A'+10)*pow(16,l-i-1);
}
}
return ans;
}
int main(){
string a,b;
while(cin>>a>>b){
cout<<change_num(a)+change_num(b)<<endl;
}
return 0;
}
法二、 直接输入十六进制数即可
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a,b;
while(scanf("%x %x",&a,&b)!=EOF){
cout<<a<<" "<<b<<endl;
cout<<a+b<<endl;
}
return 0;
}
1062
题目
思路
判断前后空格的位置即可,按照单词来一个一个反转
代码
#include<iostream>
#include <algorithm>
#include<string>
using namespace std;
string s;
int n;
int main(){
cin>>n;
cin.ignore();
for(int i=0;i<n;i++){
string ans="";
getline(cin,s);
int qkg=0;
int hkg=0;
for(int i=0;i<s.size();i++){
if(s[i]==' '){
hkg=i;
for(int j=hkg-1;j>=qkg;j--){
ans+=s[j];
}
qkg=hkg;
ans+=" ";
}
else if(i==s.size()-1){
hkg=i;
for(int j=hkg;j>=qkg;j--){
ans+=s[j];
}
qkg=hkg;
ans+=" ";
}
}
cout<<ans;
cout<<endl;
}
return 0;
}
1064
题目
思路
算平均数保留小数即可,别忘了前置的符号
代码
#include<iostream>
#include <algorithm>
using namespace std;
double num,sum;
int main(){
for(int i=0;i<12;i++){
cin>>num;
sum+=num;
}
printf("$%.2lf",sum/12);
return 0;
}
1170
题目
思路
注意判断一下是否是整数,如果是整数不用保留小数,如果是小数,保留两位小数。
代码
#include<iostream>
#include <algorithm>
using namespace std;
int n;
double a,b;
char c;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>c>>a>>b;
if(c=='+') {
if((a+b)==(int)(a+b)){
printf("%.0lf\n",a+b);
}else{
printf("%.2lf\n",a+b);
}
}
else if(c=='-') {
if((a-b)==(int)(a-b)){
printf("%.0lf\n",a-b);
}else{
printf("%.2lf\n",a-b);
}
}
else if(c=='*') {
if((a*b)==(int)(a*b)){
printf("%.0lf\n",a*b);
}else{
printf("%.2lf\n",a*b);
}
}
else if(c=='/') {
if((a/b)==(int)(a/b)){
printf("%.0lf\n",a/b);
}else{
printf("%.2lf\n",a/b);
}
}
}
return 0;
}
1197
题目
思路
就是判断一个数的十进制,十二进制,十六进制的数位和是否相等
代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 计算十进制下各位数字之和
int sjz(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
// 计算十二进制下各位数字之和
int srjz(int num) {
int sum = 0;
while (num > 0) {
sum += num % 12;
num /= 12;
}
return sum;
}
// 计算十六进制下各位数字之和
int sljz(int num) {
int sum = 0;
while (num > 0) {
sum += num % 16;
num /= 16;
}
return sum;
}
int main() {
//cout << "666" << endl;
for (int i = 2992; i <= 9999; i++) {
int decimalSum = sjz(i);
int duodecimalSum = srjz(i);
int hexadecimalSum = sljz(i);
if (decimalSum == duodecimalSum && duodecimalSum == hexadecimalSum) {
cout << i << endl;
}
}
//cout << "999" << endl;
return 0;
}
2629
题目
思路
字符串的简单判断。
这个地方不知道为什么判断前六位ac不了。
代码
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
string s;
cin>>n;
for (int i = 0; i < n; i++) {
cin >> s;
string sf = s.substr(0, 2);
if (sf == "33") sf = "Zhejiang";
else if (sf == "82") sf = "Macao";
else if (sf == "11") sf = "Beijing";
else if (sf == "54") sf = "Tibet";
else if (sf == "71") sf = "Taiwan";
else if (sf == "21") sf = "Liaoning";
else if (sf == "81") sf = "Hong Kong";
else if (sf == "31") sf = "Shanghai";
cout <<"He/She is from"<<" "<< sf << ",and his/her birthday is on"<<" "<<s.substr(10,2)<<"," <<s.substr(12,2)<<","<<s.substr(6,4)<<" " <<"based on the table."<<endl;
}
return 0;
}