目录
A:整数的个数
B:过滤多余的空格
C:二维数组右上左下遍历
D 合影效果
E:Simple prefix compression【做不起】
F:To Europe! To Europe!【做不起】
G:The Game【做不起】
H:Falling Leaves
A:整数的个数
#include<iostream>
using namespace std;
int main(){
int k,a;
cin>>k;
int sum1=0,sum2=0,sum3=0;
for(int i=0;i<k;i++){
cin>>a;
if(a==1) sum1++;
if(a==5) sum2++;
if(a==10) sum3++;
}
cout<<sum1<<endl<<sum2<<endl<<sum3;
return 0;
}
B:过滤多余的空格
这个题一直卡bug在输出,如果用j<strlen[j]
需要memset(b,0,sizeof(b)) 因为有脏数据!!!
或者要不就直接j<num好了 注意这里!!每次都会忽略这个方法然后做麻烦
//http://bailian.openjudge.cn/xly2015/B/
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
char a[200],b[200];
int num=0;
fgets(a,200,stdin);
int len=strlen(a);
for(int i=0;i<len;i++){
if(a[i]!=' '&&a[i+1]!=' ') b[num++]=a[i];
if(a[i]!=' '&&a[i+1]==' ') {
b[num++]=a[i];
b[num++]=a[i+1];
}
if(a[i]==' '&&a[i+1]==' ') continue;
if(a[i]==' '&&a[i+1]!=' ') continue;
}
// cout<<b;
for(int j=0;j<num-1;j++) cout<<b[j];
// cout<<a;
return 0;
}
C:二维数组右上左下遍历
这个题就是一条对角线上的行列坐标的和是相同的
//http://bailian.openjudge.cn/xly2015/C/
//0,0 0,1 1,0 0,2
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int a[105][105], row, col;
cin >> row >> col;
for(int i = 0; i < row; ++i)
for(int j = 0; j < col; ++j)
cin >> a[i][j];
for(int k = 0; k <= row+col-2; ++k)//行列加和从0~row+col-2
{
for(int i = 0; i < row; ++i)//遍历矩阵
for(int j = col-1; j >= 0; --j)
{
if(i+j == k)//如果在行列加和为k的斜线上
cout << a[i][j] << endl;
}
}
return 0;
}
D 合影效果
//http://bailian.openjudge.cn/xly2015/D/
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
//bool cmp1(double a,double b){
// if(a-b<1e-6) return true;
//}
bool cmp2(double a,double b){
if(a>b) return true;
}
bool cmp(double a, double b) {
//判断a、b到向上取整的数和向下取整的数的差,取最小的
double x_a = a - (int)a; //到向下取整的那个数的差
double xx_a = abs(a - (int)a - 1); //到向上取整的差
double s_a = min(x_a, xx_a);
double x_b = b - (int)b;
double xx_b = abs(b - (int)b - 1);
double s_b = min(x_b, xx_b);
if(fabs(s_a - s_b) < 1e-6){//差相等,按浮点数从小到大
return a < b;
}
return s_a < s_b;
}
bool cmpDown(double a, double b)//降序
{
return a > b;
//多层浮点数 return(a1>b1 || a1==b1&&a2>b2 || a1==b1&&a2==b2&&a3<b3)
}
int main(void){
double h1[40],h2[40];
int n,i=0,j=0;cin>>n;
char sex[7];
while(n--){
double h;
cin>>sex>>h;
if(strcmp(sex,"male")==0) h1[i++]=h;
if(strcmp(sex,"female")==0) h2[j++]=h;
}
sort(h1,h1+i);
sort(h2,h2+j,cmpDown);
for(int m=0;m<i;m++)
printf("%.2f ",h1[m]);
// cout<<h1[m]<<" ";
for(int n=0;n<j-1;n++)
printf("%.2f ",h2[n]);
// cout<<h2[n]<<" ";
cout<<h2[i-1];
return 0;
}
E:Simple prefix compression【做不起】
全网都搜不到
F:To Europe! To Europe!【做不起】
G:The Game【做不起】
H:Falling Leaves
#include <iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct Node
{
char data;
Node *left;
Node *right;
};
typedef struct Node* Tree;
string temp, str;
Tree Insert(Tree BST,char x)
{
if(BST==NULL)
{
BST = (Tree)malloc(sizeof(Node));
BST->data = x;
BST->left=BST->right=NULL;
}
else{
if(x<BST->data)//左节点
{
BST->left = Insert(BST->left,x);
}
else if(x>BST->data)//右节点
{
BST->right = Insert(BST->right,x);
}
//数据已存在的话就不插入
}
return BST;
}
Tree createBST(){ //建树
Tree root = NULL;
for(int i=0;i<str.length();i++)
root = Insert(root,str[i]);
return root; //返回根结点
}
void Print(Tree BST)
{
if(BST!=NULL)
{
printf("%c",BST->data);
Print(BST->left);
Print(BST->right);
}
}
int main(){
while(cin >> temp){ //输入字符串
if(temp != "*" && temp != "$"){
//如果输入的字符串不是组结束符或结尾符
str += temp; //将出入的字符串加到str字符串尾部
continue;
}
//如果输入的时组结束符或结尾符
reverse(str.begin(),str.end()); //将str数组反转
Tree bst = createBST(); //建树
str = ""; //将str清空
Print(bst); //输出前序遍历
printf("\n");
if(temp == "$")//如果是结尾符跳出循环
break;
}
return 0;
}