算法入门_数组和字符串

竖式问题:

#include<stdio.h>

#include<string.h>

int main(void)

{

int count = 0;

char s[20],buf[99];

scanf("%s", s);

int abc, de;

for(abc=111;abc<=999;abc++)

for(de=11;de<=99;de++){

int x;

x = abc*(de%10);

int y;

y=abc*(de/10);

int z;

z=abc*de;

sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);

int ok = 1;

int i;

for(i=0;i<strlen(buf);i++)

if(strchr(s, buf[i]) == NULL)

ok=0;

if(ok){

printf("<%d>\n",++count);

printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",abc,de,x,y,z);

}

}

printf("the number of solutions = %d\n",count);

return 0;

}

TeX

#include<stdio.h>

int main(void)

{

int c,q=1;

while((c = getchar()) != EOF){

if(c == ‘"‘){

printf("%s",q ? "“" : "”");

q = !q;

}

else

printf("%c", c);

}

return 0;

}

//这个程序是将英文的引号变成中文的引号。

WERTYU:

#include<stdio.h>

char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;‘ZXCVBNM,./";

int main(void)

{

int i, c;

while((c=getchar()) != EOF){

for(i=1;s[i] && s[i] != c; i++)

;

if(s[i])

putchar(s[i-1]);

else

putchar(c);

}

return 0;

}

回文数:

#include<stdio.h>

#include<string.h>

#include<ctype.h>

const char* rev = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";

const char* msg[] = {"not a palindrome", "a regular palindrome", "a mirrored string", "a mirrored palindrome"};

char r(char ch){

if(isalpha(ch))

return rev[ch - ‘A‘];

return rev[ch - ‘0‘ + 25];

}

int main(void)

{

char s[30];

while(scanf("%s", s) == 1){

int len = strlen(s);

int p=1, m = 1;

int i;

for(i=0; i<(len+1)/2;i++){

if(s[i] != s[len-1-i])

p = 0;

if(r(s[i]) != s[len-1-i])

m = 0;

}

printf("%s -- is %s.\n\n", s, msg[m*2+p]);

}

return 0;

}

猜数字游戏:

#include<stdio.h>

#define maxn 1010

int main(void)

{

int n, a[maxn], b[maxn];

int kase = 0;

while(scanf("%d", &n) == 1 && n)

{

printf("Game %d:\n", ++kase);

int i;

for(i=0;i<n;i++)

scanf("%d", &a[i]);

for(; ;){

int A = 0, B = 0;

int i;

for(i=0;i<n;i++){

scanf("%d", &b[i]);

if(a[i] == b[i])

A++;

}

if(b[0] == 0)

break;

int d;

for(d=1; d<=9; d++){

int c1=0,c2=0;

int i;

for(i=0; i<= n; i++){

if(a[i] == d)

c1++;

if(b[i] == d)

c2++;

}

if(c1 < c2)

B += c1;

else

B += c2;

}

printf("    (%d,%d)\n", A, B-A);

}

}

return 0;

}

生成元:

#include<stdio.h>

#include<string.h>

#define maxn 100005

int ans[maxn];

int main(void)

{

int T, n;

memset(ans, 0, sizeof(ans));

int m;

for(m=1;m<maxn;m++){

int x = 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]);

}

return 0;

}

环状序列:

#include<stdio.h>

#include<string.h>

#define maxn 105

int less(const char *s, int p, int q){

int n = strlen(s);

int i;

for(i=0;i<n;i++)

if(s[(p+i)%n] != s[(q+i)%n])

return s[(p+i)%n] < s[(q+i)%n];

return 0;

}

int main(void)

{

int T;

char s[maxn];

scanf("%d", &T);

while(T--){

scanf("%s", s);

int ans = 0;

int n = strlen(s);

int i;

for(i=1;i<n;i++)

if(less(s, i, ans))

ans = i;

for(i=0;i<n;i++)

putchar(s[(i+ans)%n]);

putchar(‘\n‘);

}

return 0;

}

这是依照算法竞赛入门经典中第三章的问题,主要涉及数组和字符串,个人觉得还是有一定难度,记录在博客,供日后参考。

时间: 2024-09-29 13:47:06

算法入门_数组和字符串的相关文章

04747_Java语言程序设计(一)_第4章_数组和字符串

例4.1小应用程序先声明一个数组a,在方法init()中创建它,指定有5个元素,然后为数组元素逐一赋值.在方法paint()中输出数组各元素的值. import java.applet.*;import java.awt.*; public class Example4_1 extends Applet { int a[];//标识符ua能引用元素类型是int的数组 public void init() { a=new int[5];//创建一个含5个元素的数组,并让a引用它 a[0]=100;

算法竞赛_入门经典_刘汝佳__(2)

1,有几位数字 #include<stdio.h> int main_2_1_digit(){ int n; while(scanf("%d",&n)){ int count = 0; if(n==0) count = 1; while(n){ count++; n/=10; } printf("%d\n",count); } return 0; } 2,三位数的三个数字 #include<stdio.h> int main_2_2_

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

[阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限

[这里只讲快速入门——即破题,正负样本不平衡.特征数量等问题就自己多看论文或者其他资料吧~~如果还有数据挖掘相关基础知识不了解的,建议看看<数据挖掘导论>] [以下是理解错误案例]:错误的根本原因是不能保证训练集的构建逻辑与赛题目标保持一致,不能保证训练集和测试集的构建逻辑保持一致,不能保证离线评测的逻辑和线上保持一致! 1. 有同学在构建训练集的时候,为了给样本(即ui对)标上正负,不是根据分割点之后第一天的购买情况来对分割点之前的ui进行标记,而是根据分割点之前某个时间段内的购买情况进行标

java常用的数组、字符串、集合操作以及数据结构与算法基本知识

java中常用封装的数组 .字符串. 集合来操作对象,但数据结构中常用的有栈和队列   数与图以及他们之间的排序,查找. 数组声明没有分配内存空间  只有创建或者是初始化时才分配,创建时把数组中的数据类型数据所在的内存空间首地址赋值给数组名,在创建每个对象时,都会给该对象分配地址和它存储的数据 .如变量    int arr[]; int arr[]={1,2,3};  arr=new int[10] ,int arr[][]={{1,9,7},{1,2,3}}  int arr[][]=new

Java算法入门-数组&amp;链表&amp;队列

算法就是解决问题的步骤,在一般的项目中可能用不上,但是一旦涉及到高并发,高性能时,就不得不考虑算法的优劣. 设计原则和特性 设计原则:正确性,可读性,健壮性,高效率和低存储 特性:有穷性,确定性,可行性,有输入,有输出. 算法题入门体验 如何判断是一个数是2的整数次幂?常规方法使用循环,但是在学习了二进制的基础知识后,发现可以使用模运算来实现. 1 import java.util.Scanner; 2 3 public class base { 4 5 public static void m

Swift 数组、字符串、集合与字典详解

今天我们来看几个最基本的数据结构:数组,字符串,集合和字典. 数组 数组是最基本的数据结构.Swift编程语言中改变了以前Objective-C时代NSMutableArray和NSArray分开的做法,统一到了Array唯一的数据结构.下面是最基本的一些实现. 1 2 3 4 5 6 7 8 9 10 11 // 声明一个不可修改的数组 let nums = [1, 2, 3] let nums = [Int](count: 5, repeatedValue: 0) // 声明一个可以修改的数

紫书第三章 数组和字符串

1  序 系统的整理下第三章的学习笔记.例题代码是在未看书本方法前自己尝试并AC的代码,不一定比书上的标程好:习题除了3-8百度了求解方法,其它均独立完成后,会适当查阅网上资料进行整理总结.希望本博文方便自己日后复习的同时,也能给他人带来点有益的帮助(建议配合紫书--<算法竞赛入门经典(第2版)>阅读本博客).有不足或错误之处,欢迎读者指出. 2  例题 2.1  UVa272--Tex Quotes #include <stdio.h> int main() { bool log

算法入门心得

最近看了刘汝佳写的算法入门经典  感觉自己的基础实在太烂了  所以总结了一些我们比较容易犯的错误给大家看看(大牛就不要看了O(∩_∩)O) 1.浮点数:两个整数计算的是浮点数的时候一定要把整数先化为浮点数  5-0.1计算机先把5变5.0之后再进行计算的 2.异或运算:这个是个很神秘的东西如果要在一个数组中找一个只有一个的数那么就可以用异或了 异或也可以用在两个数的交换a = a^b; b = a ^ b; a = a ^ b;就实现转换了 自己异或自己等于0: 3.逻辑运算符都是短路运算符a|