01 字符计数
#include<stdio.h>
int main()
{
char c;
int i,j=0,k=0;
while((c=getchar())!='\n'){
if(c=='a'||c=='e'||c=='i'||c=='u'||c=='o')
j++;
else k++;
}
printf("%d\n%d",j,k);
return 0;
}
02 棋盘
#include<iostream>
using namespace std;
const int N = 2010;
int n,m;
int a[N][N];
void add(int x1,int y1,int x2,int y2)
{
a[x1][y1] += 1;
a[x1][y2 + 1] -= 1;
a[x2 + 1][y1] -= 1;
a[x2 + 1][y2 + 1] += 1;
}
int main()
{
scanf("%d%d", &n, &m);
while(m -- )
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
add(x1,y1,x2,y2);
}
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
if(a[i][j] % 2 == 0) printf("0");
else printf("1");
}
puts("");
}
return 0;
}
03 跳跃
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[105][105];
int mmax=-10000;
int n,m;
void dfs(int x,int y,int t){
if(x>n||y>m){
return ;
}
if(x==n&&y==m){
if(t>mmax)
mmax = t;
return;
}
dfs(x,y+1,t+a[x][y+1]);
dfs(x,y+2,t+a[x][y+2]);
dfs(x,y+3,t+a[x][y+3]);
dfs(x+1,y,t+a[x+1][y]);
dfs(x+2,y,t+a[x+2][y]);
dfs(x+3,y,t+a[x+3][y]);
dfs(x+1,y+1,t+a[x+1][y+1]);
dfs(x+1,y+2,t+a[x+1][y+2]);
dfs(x+2,y+1,t+a[x+2][y+1]);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
dfs(1,1,a[1][1]);
cout<<mmax;
return 0;
}
04 卡片
#include <stdio.h>
#include <stdlib.h>
int main()
{
long int n,sum;
scanf("%ld",&n);
for(int i=1;;i++)
{
sum=i+(i*(i-1))/2;
if(sum>=n)
{
printf("%d",i);
break;
}
}
return 0;
}
05 取位数
题目描述
本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填空部分出错外,还需注意是否因在复制后有改动非填空部分产生错误。
源代码
C
#include <stdio.h>
// 求x用10进制表示时的数位长度
int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
// 取x的第k位数字
int f(int x, int k){
if(len(x)-k==0) return x%10;
return _____________________; //填空
}
int main()
{
int x = 23574;
printf("%d\n", f(x,3));
printf("%d\n", f(893275,2));
}
Java
import java.util.*;
public class Main
{
static int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
// 取x的第k位数字
static int f(int x, int k){
if(len(x)-k==0) return x%10;
return ______________________; //填空
}
public static void main(String[] args)
{
int x = 23513;
//System.out.println(len(x));
System.out.println(f(x,3));
System.out.println(f(893275,2));
}
}
解析
#include <stdio.h>
// 求x用10进制表示时的数位长度
int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
// 取x的第k位数字
int f(int x, int k){
if(len(x)-k==0) return x%10;
return f(x/10,k);//填空
}
int main()
{
int x = 23574;
printf("%d\n", f(x,3));
printf("%d\n", f(893275,2));
}
06 第几个是幸运数字
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
long long x=59084709587505;//注意本题中只能用long long型
int sum=0;
for(long long i=0;pow(3,i)<=x;i++){//难点:pow(x,y)函数不仅是求x的y次方,还可以求解倍数问题!!!
for(long long j=0;pow(5,j)<=x;j++){
for(long long k=0;pow(7,k)<=x;k++){//这里就是在求3,5,7的倍数
if(pow(3,i)*pow(5,j)*pow(7,k)<=x)
sum++;
}
}
}
printf("%d\n",sum-1);//注意这里减去的是首项111
return 0;
}
07 算式问题
#include <stdio.h>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int A, B, C, d[10]={0,1,2,3,4,5,6,7,8,9}, s, j, t=0;
for(A=100;A<=999;A++){
for(B=100;B<=999;B++){
for(C=100;C<=999;C++){
if(A+B==C){
int i[10]={0,0,0,0,0,0,0,0,0,0};
i[A/100]=1;
i[A/10%10]=1;
i[A%10]=1;
i[B/100]=1;
i[B/10%10]=1;
i[B%10]=1;
i[C/100]=1;
i[C/10%10]=1;
i[C%10]=1;
s=0;
for(j=1;j<=9;j++){
s=s+i[j];
}
if(s==9){
t++;
}
}
}
}
}
cout << t << endl;
return 0;
}
08 最大间隙
#include <iostream>
using namespace std;
int main()
{int n,sum=0;
int a[10000];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]-a[i-1]>sum){
sum=a[i]-a[i-1];
}
}
cout<<sum<<endl;
return 0;
}
09 数青蛙
#include <iostream>
using namespace std;
int get(int n)
{
if(n >= 1 && n <= 10) return 1;
if(n >= 11 && n <= 20 || n % 10 == 0) return 2;
return 3;
}
int main()
{
int ans = 0;
for (int i = 1; i <= 20; i ++) ans += get(i); // 青蛙
for (int i = 1; i <= 20; i ++) ans += get(i); // 嘴
for (int i = 2; i <= 40; i += 2) ans += get(i); // 眼睛
for (int i = 4; i <= 80; i += 4) ans += get(i); // 腿
cout << ans + 200 << endl;
return 0;
}
10 数字位数
#include<stdio.h>
int main()
{
int sum=0;
for(int i=1;i<2021;i++){
int k=i;
while(k){
sum++;
k/=10;
}
}
printf("%d",sum);
return 0;
}