赞
踩
//思路:从1开始枚举,每个数进行枚举后从牌库里减去相应的牌, //因为从1开始,11,12,13等等,所以1的牌最先没有,所以只判断1,在1的牌数归零后,输出 #include<bits/stdc++.h> using namespace std; int a[10];//0-9卡片 int main(){ //每张卡片有2021张 for(int i=0;i<=9;i++){ a[i]=2021; } for(int j=1; ;j++){ int c=j; while(c){ int b=c%10;//取出c的最后一位 if(b==1){ a[1]--;//如果b为1,就减去一张牌 } if(a[1]==0){ printf("%d ",j); return 1; //当1的牌归零后,输出,并且终止程序 } c=c/10; } } return 0; }
#include<bits/stdc++.h> using namespace std; int month[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31}; int date,ans1,ans2; bool check1(int date){ string s= to_string(date); if(s[0]==s[7]&&s[1]==s[6]&&s[2]==s[5]&&s[3]==s[4]) return true; return false; } bool check2(int date){ string s= to_string(date); if(s[0]==s[2]&&s[0]==s[5]&&s[0]==s[7]&&s[1]==s[3]&&s[1]==s[4]&&s[1]==s[6]) return true; return false; } int main(){ scanf("%d",&date); //枚举日期模板 int y=date/10000,m=date/100%100,d=date%100; for(int i=y; ; i++){ if(i%400==0||(i%100!=0&&i%4==0)) month[2]=29; else month[2]=28; int j=(i==y)?m:1; for(;j<=12;j++){ int k=(i==y&&j==m)?d+1:1; for(;k<=month[j];k++){ int data=i*10000+j*100+k; if(check1(data)&&ans1==0) ans1=data; if(check2(data)) { ans2 = data; return cout<<ans1<<'\n'<<data<<'\n',0; } } } } return 0; }
int month[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
、、、、、、、、
int y=date/10000,m=date/100%100,d=date%100;
for(int i=y; ; i++){
if(i%400==0||(i%100!=0&&i%4==0))
month[2]=29;
else
month[2]=28;
int j=(i==y)?m:1;
for(;j<=12;j++){
int k=(i==y&&j==m)?d+1:1;
for(;k<=month[j];k++){
int data=i*10000+j*100+k;
}
#include<bits/stdc++.h> using namespace std; const int N=1e2+10; int n,a[N],flag[N]; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } int ans = 0;//ans表示答案 for (int i = 1; i <= n; i++) { //将所有卡片的flag初始化为0 for (int j = 1; j <= n; j++) { flag[j] = 0;//1为取走,0没被取走 } int num = 1, pos = i, sum = 0, cnt = 0;//num表示数数的值,pos表示当前位置,sum表示能取走卡片的和,cnt表示拿走卡片数量 while (1) { if (cnt == n || num > n) break; if (flag[pos] == 1) { if (pos == n) pos = 1; else pos++; continue; } if (num == a[pos]) { sum += a[pos]; cnt++; num = 1; flag[pos] = 1; if (pos == n) { pos = 1; } else pos++; } else { num++; if (pos == n) pos = 1; else pos++; } } if (sum > ans) ans = sum; } printf("%d",ans); return 0; }
#include<bits/stdc++.h>
using namespace std;
int main(){
int ans=0;
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(__gcd(i,j)==1)
ans++;
}
}
printf("%d",ans);
}
求a和b的最大公约数
__gcd(a,b)//两个下划线
#include<bits/stdc++.h> using namespace std; bool check(int num){ while(num) { int a = num % 10; if (a == 2 || a == 4) return false; num /= 10; } return true; } int main(){ int ans=0; for(int i=1;i<=2019;i++){ for(int j=1;j<=2019;j++){ for(int k=1;k<=2019;k++){ if(i!=j&&i!=k&&j!=k&&i+j+k==2019&&check(i)&&check(j)&&check(k)) ans++; } } } ans/=6; printf("%d",ans); return 0; }
#include<bits/stdc++.h> using namespace std; int a[5][5],n,via[10],cnt,ans[5][5]; pair<int,int>p[10]; bool check(){ int sum=a[1][1]+a[2][2]+a[3][3]; if(sum!=a[1][3]+a[2][2]+a[3][1]) return false; for(int i=1;i<=3;i++){ int tmp1=0,tmp2=0;//tmp1代表行的和,tmp2代表列的和 for(int j=1;j<=3;j++){ tmp1+=a[i][j]; tmp2+=a[j][i]; } if(tmp1!=sum||tmp2!=sum) return false; } return true; } void dfs(int t){ if(t>n){ if(check()){ cnt++; for(int j=1;j<=3;j++){ for(int k=1;k<=3;k++){ ans[j][k]=a[j][k]; } } } return; } int x=p[t].first; int y=p[t].second; for(int i=1;i<=9;i++){ if(via[i]) continue; a[x][y]=i; via[i]=1; dfs(t+1); a[x][y]=0; via[i]=0; } } int main(){ for(int i=1;i<=3;i++){ for(int j=1;j<=3;j++){ cin>>a[i][j]; if(!a[i][j]) p[++n]= make_pair(i,j); via[a[i][j]]=1; } } dfs(1); if(cnt==1){ for(int i=1;i<=3;i++){ for(int j=1;j<=3;j++){ cout<<ans[i][j]; } printf("\n"); } }else printf("Too Many"); return 0; } /* * 0 7 2 * 0 5 0 * 0 3 0 */
0 7 2 0 5 0 0 3 0
#include<bits/stdc++.h> using namespace std; const int N=105; const int inf=0x3f3f3f3f; int a[N][N];//a[i][j]表示点的正负信息,1表示能量值为正,0表示能量值为负,-1表示能量值为A或者B pair<int,int>st,ed;//st记录起点A的位置,ed记录终点B的位置 int n,ans; int vis[N][N];//vis记录到达点(x,y)的移动步数 void dfs(int x,int y,int cnt){ //x,y表示该点的位置,cnt表示到达该点需要的移动步数 //如果移动步数大于ans,那么步数一定步数最优,剪枝 if(cnt>ans) return; if(cnt>vis[x][y]) return; if(x<1||x>n||y<1||y>n) return; if(x==ed.first&&y==ed.second){ ans=cnt; return; } vis[x][y]=cnt; //记录和更新走到(x,y)的步数 int tx=x-1,ty=y; if(a[tx][ty]!=a[x][y]) dfs(tx,ty,cnt+1); tx=x+1,ty=y; if(a[tx][ty]!=a[x][y]) dfs(tx,ty,cnt+1); tx=x,ty=y+1; if(a[tx][ty]!=a[x][y]) dfs(tx,ty,cnt+1); tx=x,ty=y-1; if(a[tx][ty]!=a[x][y]) dfs(tx,ty,cnt+1); } int main(){ scanf("%d",&n); ans=inf; //初始化记录步数 for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ vis[i][j]=inf; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char x; cin>>x; if(x=='A') st.first=i,st.second=j,a[i][j]=-1; else if(x=='B') ed.first=i,ed.second=j,a[i][j]=-1; else if(x=='+') a[i][j]=1; else a[i][j]=0; } } dfs(st.first,st.second,0); printf("%d",ans); return 0; }
const int inf =0x3f3f3f3f;
n++表示n自增前的值,++n表示n自增后的值‘
加入n=3
a[n++]是a[3]
a[++n]是a[4]
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,ans; int a[N],vis[N],number[N]; void dfs(int x,int cnt,int id){ if(vis[x]&&vis[x]!=id) return; if(vis[x]){ ans=max(ans,(cnt-1)-number[x]+1); return; } //x表示当前走到的节点,cnt表示当前边的编号,id表示当前路线的编号 vis[x]=id;//为节点x打上标记 number[x]=cnt;//为边添加编号 dfs(a[x],cnt+1,id); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int j=1;j<=n;j++){ dfs(j,1,j); } printf("%d",ans); return 0; }
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n,k,a[N];//a[i]表示第i台机器人的位置 bool check(int mid){ int pos=0;//pos表示1-pos区域已经被清扫,pos+1到n区域未清扫 for(int i=1;i<=k;i++){ int t=mid; if(pos<a[i]) t-=(a[i]-pos-1)*2; if(t<0) return false; pos=a[i]+t/2; } if(pos<n) return false; return true; } int main(){ scanf("%d %d",&n,&k); for(int i=1;i<=k;i++){ cin>>a[i]; } sort(a+1,a+1+k);//对机器人的位置进行从小到大的确定 int l=0,r=2*n,ans=2*n; while(l<=r){ int mid=l+r>>1; if(check(mid)) ans=mid,r=mid-1; else l=mid+1; } printf("%d",ans); return 0; }
1 拿到20%分数
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int a[N],sum[N]; int main(){ int T=1; scanf("%d",&T); int up=1,x=1; for(int i=1;i<=1000000;i++){ a[i]=x; x++; if(x>up){ up++; x=1; } } for(int i=1;i<=1000000;i++){ sum[i]=sum[i-1]+a[i]; } while(T--){ int l,r; cin>>l>>r; cout<<sum[r]-sum[l-1]; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。