版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lidengdengter/article/details/88809326
目录
L1-002 打印沙漏
先判断层数,对半处理
#include<cstdio>
char map[10][10];
int main(){
int n;char c;
while(~scanf("%d %c",&n,&c)){
int i,cnt=1,num=1;
for(i=3;;i+=2){
if(num+2*i>n) break;
num+=2*i;
cnt++;
}
i-=2;
int res=n-num;
//printf("%d\n",num);
//printf("%d--%d\n",i,cnt);
for(int j=0;j<cnt;j++){
int cmp=j;
while(cmp--) printf(" ");
for(int k=0;k<i-2*j;k++){
printf("%c",c);
}
printf("\n");
}
for(int j=cnt-2;j>=0;j--){
int cmp=j;
while(cmp--) printf(" ");
for(int k=0;k<i-2*j;k++){
printf("%c",c);
}
printf("\n");
}
printf("%d\n",res);
}
return 0;
}
L1-003 个位数统计
map使用
#include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
using namespace std;
map<char,int>v;
int main(){
char s[1005];
cin.getline(s,1005);
for(int i=0;i<strlen(s);i++)
v[s[i]]++;
map<char,int>::iterator it;
for(it=v.begin();it!=v.end();it++){
printf("%c:%d\n",it->first,it->second);
}
return 0;
}
L1-006 连续因子
暴力求
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
int n;
while(~scanf("%d",&n)){
int len=0,st=0;
for(int i=2;i<=(int)sqrt(n);i++){
ll tmp=1;
for(int j=i;j*tmp<=n;j++){
tmp*=j;
if(n%tmp==0&&j-i+1>len){
st=i;
len=j-i+1;
}
}
}
if(st==0) st=n,len=1;
printf("%d\n%d",len,st);
for(int i=st+1;i<st+len;i++)
printf("*%d",i);
printf("\n");
}
return 0;
}
L1-009 N个数求和
化简计算化简再计算
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll a[105],b[105];
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%lld/%lld",&a[i],&b[i]);
ll tmp=gcd(abs(a[i]),b[i]); //化简
a[i]/=tmp;b[i]/=tmp;
}
ll fz=a[0],fm=b[0];
for(int i=1;i<n;i++){
fz=fz*b[i]+a[i]*fm;
fm=fm*b[i];
}
if(fz==0){
printf("0\n");
continue;
}
ll tmp=gcd(abs(fz),fm); //化简
fz/=tmp;fm/=tmp;
if(fz/fm){
ll z=fz/fm;
fz-=z*fm;
if(fz==0)
printf("%lld\n",z);
else
printf("%lld %lld/%lld\n",z,fz,fm);
}
else
printf("%lld/%lld\n",fz,fm);
}
return 0;
}
L1-011 A-B
初始化字符串A中字符都为真,在B中重设为假,输出状态为真即可
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e4+5;
int main(){
char s[N],d[N];
bool vis[N];
while(cin.getline(s,N)){
for(int i=0;i<strlen(s);i++){
vis[s[i]]=true;
}
cin.getline(d,N);
for(int i=0;i<strlen(d);i++){
vis[d[i]]=false;
}
for(int i=0;i<strlen(s);i++)
if(vis[s[i]])
printf("%c",s[i]);
printf("\n");
}
return 0;
}
L1-020 帅到没朋友
记录判断,注意k的范围
#include<cstdio>
const int N=1e5+5;
bool vis[N];
int main(){
int n,k,m,x;
while(~scanf("%d",&n)){
while(n--){
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&x);
if(k>1) vis[x]=true;
}
}
scanf("%d",&m);
int cnt=0;
for(int i=0;i<m;i++){
scanf("%d",&x);
if(!vis[x]){
cnt++;
if(cnt==1)
printf("%05d",x);
else printf(" %05d",x);
vis[x]=true;
}
}
if(cnt==0)
printf("No one is handsome");
printf("\n");
}
return 0;
}
L1-023 输出GPLT
两种写法(emmmm差不多)
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
const int N=1e4+5;
char s[N];
int p[5];
char ans[]={'G','P','L','T'};
int main(){
while(~scanf("%s",s)){
memset(p,0,sizeof(p));
for(int i=0;i<strlen(s);i++){
if(s[i]=='g'||s[i]=='G') p[0]++;
if(s[i]=='p'||s[i]=='P') p[1]++;
if(s[i]=='l'||s[i]=='L') p[2]++;
if(s[i]=='t'||s[i]=='T') p[3]++;
}
int sum=p[0]+p[1]+p[2]+p[3];
// for(int i=0;i<sum;i++){ //写法一
// if(p[0]) printf("G"),p[0]--;
// if(p[1]) printf("P"),p[1]--;
// if(p[2]) printf("L"),p[2]--;
// if(p[3]) printf("T"),p[3]--;
// }
// printf("\n");
while(sum--){ //写法二
for(int i=0;i<4;i++){
if(p[i]){
printf("%c",ans[i]);
p[i]--;
}
}
}
printf("\n");
}
return 0;
}
L1-027 出租
数字记录后排序再加上下标标签即可
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
struct node{
int id;
}p[10];
int a[10];
bool cmp1(int a,int b){
return a>b;
}
int main(){
char s[12];
bool vis[12];
while(cin.getline(s,15)){
memset(vis,false,sizeof(vis));
int cnt=0,len=strlen(s);
for(int i=0;i<len;i++)
if(!vis[s[i]-'0']){
a[cnt++]=s[i]-'0';
vis[s[i]-'0']=true;
}
sort(a,a+cnt,cmp1);
for(int i=0;i<cnt;i++)
p[a[i]].id=i;
int ans[12];
for(int i=0;i<len;i++){
ans[i]=p[s[i]-'0'].id;
}
printf("int[] arr = new int[]{%d",a[0]);
for(int i=1;i<cnt;i++)
printf(",%d",a[i]);
printf("};\n");
printf("int[] index = new int[]{%d",ans[0]);
for(int i=1;i<len;i++)
printf(",%d",ans[i]);
printf("};\n");
}
return 0;
}
L1-043 阅览室
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node{
char op;
int h1,m1;
int h2,m2;
}p[1005];
bool vis[1005];
int main(){
int n,t=0;
scanf("%d",&n);
while(t<n){
memset(vis,false,sizeof(vis));
int id,h,m,cnt=0;
double sum=0;
while(true){
char op;
scanf("%d %c %d:%d",&id,&op,&h,&m);
if(id==0){
if(cnt==0) printf("0 0\n");
else printf("%d %.0f\n",cnt,sum/cnt);
t++;
break;
}
p[id].op=op;
//printf("%c\n",op);
if(op=='S'){
p[id].h1=h;
p[id].m1=m;
vis[id]=true;
}
else if(op=='E'){
p[id].h2=h;
p[id].m2=m;
if(vis[id]){
if(p[id].m2<p[id].m1){
p[id].m2+=60;
p[id].h2-=1;
}
int tmp=(p[id].m2-p[id].m1)+(p[id].h2-p[id].h1)*60;
//printf("tmp=%d\n",tmp);
cnt++;
sum+=tmp;
vis[id]=false;
}
}
}
}
return 0;
}
L1-049 天梯赛座位分配
模拟
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
int a[105];
bool vis[105];
int main(){
int n;
vector<int>ans[105];
while(~scanf("%d",&n)){
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
a[i]*=10;
sum+=a[i];
}
memset(vis,false,sizeof(vis));
int cnt=0,num=0;
for(int i=1;;){
for(int j=0;j<n;j++){
if(ans[j].size()<a[j]){ //未排好号
cnt++;
ans[j].push_back(i);
if(num+1==n) //最后一个队
i+=2;
else
i+=1;
}
if(!vis[j]&&ans[j].size()>=a[j]){ //排好号
vis[j]=true;
num++;
}
}
if(cnt==sum) //全部排好
break;
}
for(int i=0;i<n;i++){
printf("#%d\n",i+1);
for(int j=0;j<ans[i].size();j++){
if(j%10!=0)
printf(" ");
printf("%d",ans[i][j]);
if(j%10==9)
printf("\n");
}
}
}
return 0;
}
L1-056 猜数字
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1e4+4;
struct node{
char s[10];
int num;
}p[N];
int main(){
int n,sum=0;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%s %d",p[i].s,&p[i].num);
sum+=p[i].num;
}
sum/=2*n;
int minx=abs(p[0].num-sum);
int k=0;
for(int i=1;i<n;i++){
int tmp=abs(p[i].num-sum);
if(tmp<minx){
k=i;
minx=tmp;
}
}
printf("%d %s\n",sum,p[k].s);
}
return 0;
}