双重循环
- 2412 九九乘法表
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=1;j<=i;j++){
printf("%d*%d=%d ",j,i,j*i);
}
printf("\n");
}
}
- 2089 打印九九乘法表
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
}
- 2413 图形输出1
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=1;j<=i;j++){
printf("*");
}
printf("\n");
}
}
- 2414 图形输出2
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=1;j<=2*i-1;j++){
printf("*");
}
printf("\n");
}
}
- 2088 打印星塔
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=1;j<=2*i-1;j++){
printf("*");
}
printf("\n");
}
}
- 2091 幸运数们
#include <stdio.h>
int main(){
int l;
int r;
scanf("%d%d",&l,&r);
int count=0;
for (int i=l;i<=r;i++){
for (int j=i;j!=0;j=j/10){
if(j%10==7){
printf("%d\n",i);
count++;
break;
}
}
}
if (count==0){
printf("None\n");
}
}
- 2122 分解质因数
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=2;i<=n;i++){
while(n%i==0){
printf("%d\n",i);
n=n/i;
}
}
}
- 2145 打印月份 (题目有问题)
#include <stdio.h>
int main(){
int year;
int month;
int week;
scanf("%d%d%d",&year,&month,&week);
int n=(year%4==0 && year%100==0 || year%400==0)?29:28;
int days[12]={31,n,31,30,31,30,31,31,30,31,30,31};
printf("S M T W T F S\n");
for (int i=0;i<week;i++){
printf(" ");
}
for(int i=1;i<10;i++){
printf("%d ",i);
if((i+week)%7==0){
printf("\n");
}
}
for (int i=10;i<=days[month-1];i++){
printf("%d ",i);
if((i+week)%7==0){
printf("\n");
}
}
printf("\n");
}
数字处理
- 2135 价钱统计
#include <stdio.h>
int main(){
float m1,m2,m3,m4;
scanf("%f%f%f%f",&m1,&m2,&m3,&m4);
int t1,t2,t3,t4;
int sum=0;
t1=(int)((1.2*m1)*10+0.5);
t2=(int)((3.5*m2)*10+0.5);
t3=(int)((4.5*m3)*10+0.5);
t4=(int)((5*m4)*10+0.5);
printf("%.1f\n",1.0*t1/10);
printf("%.1f\n",1.0*t2/10);
printf("%.1f\n",1.0*t3/10);
printf("%.1f\n",1.0*t4/10);
sum=(int)((1.2*m1+3.5*m2+4.5*m3+5*m4)*10+0.5);
printf("%.1f\n",1.0*sum/10);
}
- 2118 完全平方数
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int count=0;
for (int i=1;i<n;i++){
if(n==i*i){
printf("%d\n",i);
count++;
}
}
if(count==0){
printf("No\n");
}
}
- 2101 越界了吗
#include <stdio.h>
int main(){
long long a,b;
scanf("%lld%lld",&a,&b);
long long c=a+b;
if(c<-2147483648ll || c>2147483647ll){
printf("Yes\n");
}else{
printf("No\n");
}
}
- 2119 吃龙虾
#include <stdio.h>
int main(){
int n,m;
scanf("%lld%lld",&n,&m);
int ai[n];
for (int i=0;i<n;i++){
scanf("%d",&ai[i]);
}
long long sum=0;
for(int i=0;i<n;i++){
if(ai[i]>=m){
sum=sum+ai[i];
}
}
printf("%lld\n",sum);
}
进制
- 2102 或减与
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",(a|b)-(a&b));
}
- 2112 转二进制
#include <stdio.h>
int main(){
//printf("%d\n",11/2);
int n;
scanf("%d",&n);
for (n;n!=0;n=n/2){
printf("%d",n%2);
}
printf("\n");
}
- 1922 乘法
#include <stdio.h>
#include <math.h>
int toDec(int,int);
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int count = 0;
for (int i=2;i<=16;i++){
int s1 = toDec(a,i);
int s2 = toDec(b,i);
int s3 = toDec(c,i);
if(s1*s2 == s3){
printf("%d\n",i);
count++;
break;
}
}
if (count == 0){
printf("0\n");
return 0;
}
}
int toDec(int n,int m){ // m为进制
int count = 0;
int sum = 0;
if (n%10 >= m){
return -1;
}else{
sum = n%10;
}
while(n){
n = n/10;
count++;
if (n%10 >= m){
return -1;
}else{
sum = sum + (n%10)*pow(m,count);
}
}
return sum;
}
- 2121 转二进制2
#include <stdio.h>
#include <math.h>
int main(){
//double d;
//scanf("%lf",&d);
//printf("%.0lf\n",pow(10,(d-1)));
int n;
scanf("%d",&n);
int d=0;
int arr[31]={0};
for (int i=0;n!=0;i++){
arr[i]=n%2;
d++;
n=n/2;
}
for (int i=d-1;i>=0;i--){
printf("%d",arr[i]);
}
printf("\n");
}
- 2130 进制转换
#include <stdio.h>
int TransSystem(int,int,int,int*);
void PrintArr(int*,int);
int main(){
int n;
scanf("%d",&n);
int b;
scanf("%d",&b);
int count=0;
int arr[31]={0};
int *q=arr;
if(n==0){
printf("0\n");
}else{
TransSystem(n,b,count,q);
PrintArr(q,TransSystem(n,b,count,q));
}
}
int TransSystem(int n,int b,int count,int* arr){
for (int i=0;n!=0;i++){
arr[i]=n%b;
count++;
n=n/b;
}
return count;
}
void PrintArr(int* arr,int count){
for (int i=count-1;i>=0;i--){
if(arr[i]<=9 && arr[i]>=0){
printf ("%d",arr[i]);
}else{
switch(arr[i]){
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
}
}
}
printf("\n");
}
多重循环
- 1956 费马大定理
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int count=0;
for (int i=2;i<=n;i++){
for (int j=2;j<n;j++){
for (int k=2;k<n;k++){
for(int l=2;l<k;l++){
if(i*i*i==j*j*j+k*k*k+l*l*l && j<l && l<k){
printf("(%d,%d,%d,%d)\n",i,j,l,k);
count++;
}
}
}
}
}
if (count==0){
printf("OMG\n");
}
}
数组
- 2092 翻转数组
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int arr[n];
for (int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
/*
int arr1[n];
for (int i=0;i<n;i++){
arr1[i]=arr[n-1-i];
}
*/
printf("%d\n",n);
for (int i=n-1;i>=0;i--){
printf("%d\n",arr[i]);
}
}
- 1911 收金币
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int arr[n];
for (int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int count=0;
for (int i=0;i<n;i++){
int sum1=0;
int sum2=0;
for (int j=0;j<=i;j++){
sum1=sum1+arr[j];
}
for (int k=n-1;k>i;k--){
sum2=sum2+arr[k];
}
if(sum1==sum2){
count++;
}
}
if (count==0){
printf("No\n");
}else{
printf("Yes\n");
}
}
1955 过欠判断
#include <stdio.h>
int Factor(int,int,int*);
int Printfactor(int*,int,int);
int main(){
int n;
scanf("%d",&n);
int arr[n];
int arr1[60000];
int* p=arr1;
int count=0;
for (int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
//printf("%d\n",Printfactor(p,Factor(arr[i],count,p),sum));
for (int i=0;i<n;i++){
int sum=0;
if(Printfactor(p,Factor(arr[i],count,p),sum)>arr[i]){
printf("G\n");
}else if (Printfactor(p,Factor(arr[i],count,p),sum)<arr[i]){
printf("Q\n");
}else{
printf("E\n");
}
// Printfactor(p,Factor(arr[i],count,p));
// printf("%d\n",Factor(arr[i],count,p));
}
}
int Factor(int a,int count,int* p){
for (int i=1;i<a;i++){
if(a%i==0){
*p=i;
p++;
count++;
}
}
return count;
}
int Printfactor(int*p,int n,int sum){
for (int i=0;i<n;i++){
sum=sum+p[i];
}
return sum;
}
- 1959 好事成双
#include <stdio.h>
int main(){
int arr[100];
int n;//数组长度
for (int i=0;n<100;i++){
scanf("%d",&arr[i]);
if(arr[i]==0){
n=i;
break;
}
}
int count = 0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if(arr[i]==2*arr[j] || 2*arr[i]==arr[j]){
count++;
}
}
}
printf("%d\n",count/2);
/*
for (int i=0;i<=n;i++){
printf("%d\n",arr[i]);
}
*/
}
数组:记录算法
- 1912 咖啡馆
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(){
int n; // 座位个数
scanf("%d",&n);
char guests[26*2+1]; //顾客的来和走
scanf("%s",guests);
char seat[n]; //座位状态 0为无人使用 1为有人使用
memset(seat,0,n);
int count = n; // 当前空座位个数
int res = 0; // 未被服务的顾客个数
//先判断顾客是否离开
for (int i=0;guests[i] != '\0';i++){
bool leave = false; // 该乘客是否离开
for (int j=0;j<n;j++){
if(seat[j] == guests[i]){
seat[j] = 0; // 顾客离开 座位状态置空
count++;
leave = true; // 离开
break;
}
}
if (!leave){ //顾客没离开
if (count > 0){ // 有空座位
for (int j=0;j<n;j++){
if(seat[j] == 0){ // 第j个座位无人使用
seat[j] = guests[i]; //第i个顾客坐到第j个座位上
--count; // 空座位减一
break;
}
}
}else{ //没有座位,顾客立即离开
++res;
}
}
}
printf("%d\n",res/2);
}
- 1915 西湖游船
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int MaxofNum(int a,int b){
return a>b?a:b;
}
int main(){
int n,m,w;
scanf("%d%d%d",&n,&m,&w);
int c[n];
for (int i=0;i<n;i++){
scanf("%d",&c[i]);
}
bool record[n];
memset(record,false,n);
int weight = 0;
int max_weight = 0;
for (int i=0;i<m;i++){
int index;
scanf("%d",&index);
--index;
if(record[index]){
record[index] = false;
weight -= c[index];
}else{
record[index] = true;
weight += c[index];
if(weight > w){
printf("Oh, My God!\n");
return 0;
}
}
max_weight = MaxofNum(weight,max_weight);
}
printf("%d\n",max_weight);
}
- 2113 丢失的数字
#include <stdio.h>
int main(){
int n,m;
scanf("%d%d",&n,&m);
int arr[100000];
int l;
for (int i=0;i<m;i++){
scanf("%d",&l);
arr[l]=1;
}
for (int i=1;i<=n;i++){
if(arr[i]!=1){
printf("%d\n",i);
}
}
}
- 2114 多出的数字
#include <stdio.h>
int main(){
int n,m;
scanf("%d%d",&n,&m);
int arr[100000]={0};
int t;
for (int i=0;i<m;i++){
scanf("%d",&t);
arr[t-1]=arr[t-1]+1;
}
for (int i=0;i<n;i++){
if(arr[i]!=1){
printf("%d %d\n",i+1,arr[i]);
}
}
}
字符串
- 2150 字符替换
#include <stdio.h>
//48~57
int main(){
char s[10000];
scanf("%s",s);
for (int i=0;s[i]!='\0';i++){
if(s[i]>=48 && s[i]<=57){
s[i]='*';
}
}
printf("%s\n",s);
}
- 2153 字典序
#include <stdio.h>
int main(){
char a[10000];
char b[10000];
scanf("%s",a);
scanf("%s",b);
for (int i=0;a[i]!='\0';i++){
if(a[i]<b[i]){
printf("YES\n");
break;
}else if(a[i]>b[i]){
printf("NO\n");
break;
}
}
}
- 2148 字符出现的位置
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
getchar();
char s[n+1];
for (int i=0;i<n;i++){
scanf("%c",&s[i]);
}
s[n]='\0';
// printf("%s\n",s);
getchar();
char a;
scanf("%c",&a);
// printf("%c",a);
int count=0;
for (int i=0;s[i]!='\0';i++){
if(s[i]==a){
printf("%d\n",i);
count++;
break;
}
}
if(count==0){
printf("-1\n");
}
}
- 2149 字符出现的位置
#include <stdio.h>
int main(){
char n[10000];//母串
scanf("%s",n);
getchar();
char m[10000];//子串
scanf("%s",m);
int len1=0; //母串长度
int len2=0; //子串长度
for (int i=0;n[i]!='\0';i++){
len1++;
}
for (int i=0;m[i]!='\0';i++){
len2++;
}
// printf("%d\n",len1);
// printf("%d\n",len2);
int sum=0;
for (int i=0;i<(len1-len2);i++){
int count=0;
for (int j=0;j<len2;j++){
if(m[j]==n[i+j]){
count++;
// printf("%d\n",count);
}
}
if (count==len2){
printf("%d\n",i);
break;
}else{
sum++;
}
}
if (sum==(len1-len2)){
printf("-1\n");
}
}
- 1950 数据的存储
#include <stdio.h>
// ” asc码:34
int main(){
char s[1025];
gets(s);//gets(char* s) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中 位于stdio.h
int count=0;
for (int i=0;s[i]!='\0';i++){
if(s[i]==34 && count==0){
printf("``");
count++;
}else if(s[i]==34 && count==1){
printf("''");
count--;
}else if(s[i]!=34){
printf("%c",s[i]);
}
}
printf("\n");
}