均采用C++通过。
1、 如果x是y的生成元,那么y=x+(x的各个位数之和)如,x为abc组成的3位数,那么x+a+b+c=y,y的生成元就是x。求1~10000内,输入任意一个数,输出它的生成元,如果没有输出0。例:216 输出198,121输出0
#define maxn 100005
int ans[maxn];
void digit_generator(){
int T,n; for(int i= 0;i<100005;i++) { ans[i] = 0; } for(int m= 1;m<maxn;m++){ int x= m , y=m; //将m作为y的生成元,这儿提取m的各个位数然后相加 while(x>0){ y+=x%10; x/=10; } if(ans[y]==0||m<ans[y]) ans[y] = m; } scanf("%d",&T);//循环次数 while(T--){ scanf("%d",&n); printf("%d\n",ans[n]); }
}
2、不用数组存储,输入一堆数字,数字数量<1000000,计算1的个数
#define maxn 100000000+10
char s[maxn];
void count1(){
scanf("%s",s); int tot = 0; for(int i = 0;i<strlen(s);i++){ if(s[i]=='1') tot++; } printf("%d\n",tot);
}
3、计算判断题分数,O记1分,X记0分,若连续正确,则累加1,2,3等如OXOOOO=1+0+1+2+3+4
#define maxn 85
char s[maxn];
void score(){
scanf("%s",s); int score = 0; int flag = 0; for(int i = 0;i<strlen(s);i++){ if(s[i]=='X') { score+=0; flag = 0; } if(s[i]=='O'){ flag++; score+=flag; } } printf("%d",score);
}