[藍橋杯 2013 省 B] 翻硬幣
?
題目背景
小明正在玩一個“翻硬幣”的游戲。
題目描述
桌上放著排成一排的若干硬幣。我們用?*
?表示正面,用?o
?表示反面(是小寫字母,不是零),比如可能情形是?**oo***oooo
,如果同時翻轉左邊的兩個硬幣,則變?yōu)?oooo***oooo
。現(xiàn)在小明的問題是:如果已知了初始狀態(tài)和要達到的目標狀態(tài),每次只能同時翻轉相鄰的兩個硬幣,那么對特定的局面,最少要翻動多少次呢?
輸入格式
兩行等長字符串,分別表示初始狀態(tài)和要達到的目標狀態(tài),每行長度小于?1000。
數(shù)據(jù)保證一定存在至少一種方案可以從初始狀態(tài)和要達到的目標狀態(tài)。
輸出格式
一個整數(shù),表示最小操作步數(shù)。
輸入輸出樣例
輸入輸出樣例
輸入 #1
********** o****o****
輸出 #1
5
?輸入 #2
*o**o***o*** *o***o**o***
?輸出 #2
1
#include<stdio.h>
#include<string.h>
#include <assert.h>
int main()
{
char arr[1000] = { 0 }, str[1000] = { 0 }, count = 0;
scanf("%s%s", &arr, &str);
assert(strlen(arr)== strlen(str));//斷言-判斷兩個字符串長度是否相等
int rs = strlen(arr);
int i = 0;
while (i < rs)//遍歷找不同
{
if (arr[i] != str[i])
{
arr[i] = (arr[i] == '*' ? 'o' : '*');
arr[i + 1] = (arr[i + 1] == '*' ? 'o' : '*');
count++;
}
i++;
}
printf("%d", count);
return 0;
}
?[NOIP2006 普及組] 明明的隨機數(shù)
題目描述
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了?N?個?1?到?1000?之間的隨機整數(shù)?(N≤100),對于其中重復的數(shù)字,只保留一個,把其余相同的數(shù)去掉,不同的數(shù)對應著不同的學生的學號。然后再把這些數(shù)從小到大排序,按照排好的順序去找同學做調查。請你協(xié)助明明完成“去重”與“排序”的工作。
輸入格式
輸入有兩行,第?1?行為?1?個正整數(shù),表示所生成的隨機數(shù)的個數(shù)?N。
第?2?行有?N?個用空格隔開的正整數(shù),為所產(chǎn)生的隨機數(shù)。
輸出格式
輸出也是兩行,第?1?行為?1?個正整數(shù)?M,表示不相同的隨機數(shù)的個數(shù)。
第?2?行為?M?個用空格隔開的正整數(shù),為從小到大排好序的不相同的隨機數(shù)。
輸入輸出樣例
輸入 #1
10 20 40 32 67 40 20 89 300 400 15
輸出 #1
8 15 20 32 40 67 89 300 400
#include<stdio.h>
int main()
{
int n = 0, str[100] = { 0 }, temp = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &str[i]);
}
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (str[j + 1] < str[j])
{
temp = str[j + 1];
str[j + 1] = str[j];
str[j] = temp;
}
}
}
for (int i = 0; i < n - 1; i++)//n-1是為了防止越界
{
//把i+1后邊的元素往前覆蓋
if (str[i] == str[i + 1])
{
for (int k = i; k < n - 1; k++)
{
str[k] = str[k + 1];
}
n--;
i--;
}
}
printf("%d\n", n);
for (int i = 0; i < n; i++)
{
printf("%d ", str[i]);
}
return 0;
}
P8835 [傳智杯 #3 決賽] 子串
題目背景
disangan233 喜歡字符串,于是 disangan333 想讓你找一些 disangan233 喜歡的串。
題目描述
在傳智的開發(fā)課堂上,希望您開發(fā)一款文檔處理軟件。
給定?T?組詢問,每次給定?2?個長度為?n,m?的只含英文字母的字符串?a,b,求?a?在?b?中的出現(xiàn)次數(shù),相同字符不區(qū)分大小寫。注意?a?是?b?中連續(xù)子序列。
對于所有數(shù)據(jù),T≤100,∑n≤∑m≤10^3。字符串僅由大小或者小寫的英文字母組成。
輸入格式
輸入共?3T+1?行。
第?1?行輸入?1?個正整數(shù)?T。
接下來共?T?組輸入,每組輸入共?3?行。
第?1?行輸入?2?個正整數(shù)?n,m。
第?2?行輸入一個長度為?n?的字符串?a。
第?3?行輸入一個長度為?m?的字符串?b。
輸出格式
輸出共?T?行,第 i?行輸出?1?個整數(shù),表示詢問?i?的答案。
輸入輸出樣例
輸入 #1
5 3 10 abc abcabcabca 2 10 aa AAaAaaAaAa 5 5 AbCdE eDcBa 5 5 abcde ABCDE 3 10 aba ABaBaAbaBA
輸出 #1
3 9 0 1 4
解法一:?
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int t = 0, n = 0, m = 0, count = 0;//t小組數(shù),n,m字符串的長度,count計數(shù)器
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m);
char* a = (char*)malloc( (n+1) * sizeof(char));//開辟數(shù)組a的動態(tài)內存空間
//因為數(shù)組類型是字符串要留一個字節(jié)放斜桿零,防止越界訪問
if (a == NULL)
{
return 1;
}
scanf("%s", a);
char* b = (char*)malloc( (m+1) * sizeof(char));//開辟數(shù)組b的動態(tài)內存空間
if (b == NULL)
{
return 1;
}
scanf("%s", b);
char* ptr = b;//記錄b的首地址
for (int i = 0; i < n; i++)
{
*a = tolower(*a);//統(tǒng)一轉換為小寫
}
for (int i = 0; i < m; i++)
{
*b = tolower(*b);
}
for (int i = 0; i < m; i++)
{
if (strncmp( a ,ptr , n) == 0) //比較前n個字符相同,count++
{
count++;
ptr + n; //指向b的指針向前挪動n位比較下一個
}
ptr++;
if (m - i < n)
{
break;
}
}
printf("%d", count);
free(a); //釋放動態(tài)空間
a = NULL;
free(b);
b = NULL;
}
return 0;
}
?解法一的運行時間可能會超時,可以試試解法二:文章來源:http://www.zghlxwxcb.cn/news/detail-751643.html
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 函數(shù)用于計算字符串a(chǎn)在字符串b中的出現(xiàn)次數(shù)
int JiShu(char* a, char* b)
{
int count = 0;
int lenA = strlen(a);
int lenB = strlen(b);
for (int i = 0; i <= lenB - lenA; i++)
{
// 忽略大小寫比較
int flag = 1;
for (int j = 0; j < lenA; j++)
{
if (tolower(a[j]) != tolower(b[i + j]))
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
}
return count;
}
int main()
{
int t;
scanf("%d", &t);
for (int i = 0; i < t; i++)
{
int n, m;
scanf("%d %d", &n, &m);
char a[1001], b[1001];
scanf("%s", a);
scanf("%s", b);
int rs = JiShu(a, b);
printf("%d\n", rs);
}
return 0;
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-751643.html
到了這里,關于C語言-每日刷題練習的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!