c语言题目:求N×N矩阵的matlab矩阵最大值位置并输出。下面有图片,绿色框中间要填什么!急求!

C语言题目:输入两个矩阵,a[m][n]和b[n][p];求他们的乘积_百度知道
C语言题目:输入两个矩阵,a[m][n]和b[n][p];求他们的乘积
描述:输入两个个矩阵的行 列并输入其数值
我写的是这样的,但错了,哪位大神帮我看看?
#include&stdio.h&
void main()
double a[100][1...
我有更好的答案
#include&stdio.h&int&main(){&&&&double&a[100][100],b[100][100],h[100][100];&&&&int&m,n,p,q,i,j,k,l,c,d;&&&&scanf(&%d&%d&,&m,&n);//输入行数和列数&&&&for(i=0;&i&m;&i++)&&&&{&&&&&&&&for(j=0;&j&n;&j++)&&&&&&&&{&&&&&&&&&&&&scanf(&%lf&,&a[i][j]);//输入第一个矩阵&&&&&&&&}&&&&}&&&&scanf(&%d&%d&,&p,&q);//输入行数和列数&&&&for(l=0;&l&p;&l++)&&&&{&&&&&&&&for(k=0;&k&q;&k++)&&&&&&&&{&&&&&&&&&&&&scanf(&%lf&,&b[l][k]);//输入第二个矩阵&&&&&&&&}&&&&}&&&&for(c=0;&c&m;&c++)&//行数小于等于第一个矩阵的行数&&&&{&&&&&&&&for(d=0;&d&q;&d++)&//列数小于等于第二个矩阵的列数&&&&&&&&{&&&&&&&&&&&&int&sum&=&0;&&&&&&&&&&&&for(k=0;&k&n;&k++)&//第一个矩阵行数和第二个矩阵列数&&&&&&&&&&&&{&&&&&&&&&&&&&&&&sum&+=a[c][k]*b[k][d];//计算&&&&&&&&&&&&}&&&&&&&&&&&&h[c][d]&=&&&&&&&&&}&&&&}&&&&for(c=0;&c&m;&c++)&&&&{&&&&&&&&for(d=0;&d&q;&d++)&&&&&&&&{&&&&&&&&&&&&printf(&%.0f&&,h[c][d]);//输出&&&&&&&&}&&&&&&&&printf(&\n&);&&&&}&&&&return&0;}两处错,输入第二个矩阵要用b然后回去好好翻翻矩阵运算的公式,照着公式算。然后按楼上说的,每个都括起来,没坏处
采纳率:31%
来自团队:
#include&stdio.h&#include&stdlib.h&main(){ double a[100][100],b[100][100],h[100][100]={0}; int m,n,p,q,i,j,k,l,c,d; scanf(&%d %d&,&m,&n);//输入行数和列数 for(i=0;i&m;i++)
for(j=0;j&n;j++)
scanf(&%lf&,&a[i][j]);//输入第一个矩阵scanf(&%d %d&,&p,&q);//输入行数和列数 for(l=0;l&p;l++)
for(k=0;k&q;k++)
scanf(&%lf&,&b[l][k]);//输入第二个矩阵 //从此开始修改!!!!!!!!!!!!!!!!!!!!!! if(p!=n){printf(&不能相乘!\n&);return 0;} for(c=0;c&m;c++)//行数小于等于第一个矩阵的行数
for(d=0;d&q;d++)//列数小于等于第二个矩阵的列数
for(k=0;k&n;k++)
h[c][d]+=a[c][k]*b[k][d];//计算
for(c=0;c&m;c++)
for(d=0;d&q;d++)
printf(&%3.0f&,h[c][d]);//输出
printf(&\n&);
system(&pause&);}你的矩阵乘法写错了,具体写法可以到百度百科查还有你俩次输入矩阵用的都是a数组,b数组根本就是空的你没有判断两个矩阵相乘的条件,即前列等于后行最后,你的矩阵里会有小数吗? printf(&%.0f&,h[c][d]);//输出如果有,为什么最后输出还不要小数位?如果不需要建议你都把它改成int,输出%d,容错率更高至于我最后只给你卡了三位输出,如果不够你可以自己改
最好每个for循环都用{ }
为您推荐:
其他类似问题
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。亲萌,c语言求助 题目:对于一个如图片1所示4乘3的矩阵a,找出其中最大值max及该值所在位置(m_百度知道
亲萌,c语言求助 题目:对于一个如图片1所示4乘3的矩阵a,找出其中最大值max及该值所在位置(m
亲萌,c语言求助
题目:对于一个如图片1所示4乘3的矩阵a,找出其中最大值max及该值所在位置(m,n)。
从键盘输入:12 23
则输出:max=43
---------------------------------...
我有更好的答案
main(){&&&&int&&a[4][3],&i,j,&max,&m,n;&&&&for(&i=0;i&4;i++&)&&&&&&&&for(&j=0;j&3;j++&)&&&&&&&&&&&&scanf(&&%d&,&&a[i][j]&);&//输入12个数&&&&&&&&max=a[0][0];&&&&m=n=0;&//先假定第一个数是最大的,m、n是该数的下标&&&&for(&i=0;i&4;i++&)&&&&&&&&for(&j=0;j&3;j++&)&&&&&&&&&&&&if&(&max&&&a[i][j]&)&//查找最大的数,并记录下其下标值&&&&&&&&&&&&{&&&&&&&&&&&&&&&&max=a[i][j];&&&&&&&&&&&&&&&&m=i;n=j;&&&&&&&&&&&&}&&&&printf(&max=%d&row=%d&col=%d&,&max,&m,&n&);}
采纳率:75%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言编程题,尽量简单点,要求按下面的。 题目描述 输入n,在一个二维数组中形成并输出如下所示的n_百度知道
C语言编程题,尽量简单点,要求按下面的。 题目描述 输入n,在一个二维数组中形成并输出如下所示的n
C语言编程题,尽量简单点,要求按下面的。
输入n,在一个二维数组中形成并输出如下所示的n*n矩阵(假定n=6)
输入n的值(如6)
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
1 1 1 1 1 ...
我有更好的答案
#include&stdio.h&int main(){int n,i,j,k,a[20][20];&scanf(&%d&,&n);&for(i=0;i&n;i++)&{for(j=0;j&n;j++)& & {k=i+1&n-i?i+1:n-i;& & &k=k&j+1?k:j+1;& & &k=k&n-j?k:n-j; a[i][j]=k; printf(&%3d&,a[i][j]); }& printf(&\n&);} & return 0;}&&
有办法让press any key to continue 跟在最后一排后面吗?不回车
这与所用的编译系统有关,我的这个是Dev-C++
可是这个提交是系统认定的,只要答案和它设定的不一样,就对不了
你要求的情况要给个图片啊
我弄出来了,谢谢
采纳率:83%
来自团队:
为您推荐:
其他类似问题
二维数组的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
图是要求的输出范例程序要求输入一个大于等于5的奇数n然后输出一个和示例图类似的特殊蛇形矩阵 中心是0然后向外展开要求是不能用数组和stdio.h以外的lib已经想了整整一下午了 完全没有任何思路.求大神帮帮忙想一下思路,不用写代码,帮忙想想思路就行.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
P.S. 若覺得我的答案不佳或是有誤還請不吝指教, 光是給負分無法讓答案精進, 謝謝
改寫了代碼, 不使用數組
最大的關鍵是找出規則, 首先我們來算出 n 階蛇行矩陣要使用多少的 digit (from 0-9):
我們觀察規則:
(示意圖) 5 階蛇行矩陣需要使用 5+4+4+2+2 個數字
5*5 矩陣共填入 5+4+4+2+2 個數字
5: first row 右行
4: last col 下行
4: last row 左行
2: first col 上行
2: third row 右行
7*7 矩陣共填入 7+6+6+4+4+2+2 個數字
= n + 2*(n-1-2*0) + 2*(n-1-2*1) + ... 2*(n-1-2*((n-1)/2-1))
(中間的級數運算就省略)
= (n^2+2n-1)/2 個數字
比如說我們得出 5 階矩陣要填入 17 個數字, 那 0, 0 位置要填入的值為第 16 個數字(從 0 開始算):
第 16 個數字
第 0 個數字
所以說 n 階矩陣的第 c 個數字的值為:
有了上述認知之後, 我們來討論如何找出矩陣中 i, j 位置的元素是第幾個要填入的值, 方法很簡單, 我們試著從頭開始繞行, 等到繞行到該位置時去檢查這是輪到第幾個應填入的數字
模擬繞行的過程可以簡單表示為:
首先算出應填入數字數量 C, 我們繞行時會從第 C-1 個數字開始填
從 first row 開始向右行走 n 個位置, 每個位置分別對應前 n 個應填入的數字 (c = C-1 ~ c = C-1-n)
如果中間有經過位置 i, j 則確認位置 i, j 應填入第 c 個數字, 值為 c%10 &stop&
如果沒有則需要向右轉開始下行, 設定方向 direction 為 'down', 調整步數 move 為 n-1 &前往 2&
朝 direction 方向前進 move 步, 同時要持續計算, 維持每個位置對應的數字
如果中間有經過位置 i, j 則確認位置 i, j 應填入第 c 個數字, 值為 c%10 &stop&
如果沒有則需要向右轉, 根據現有方向設定 direction, 調整步數 move
如果是第一次走 move 步, 則維持現有步數 &重複 2&
如果是第二次走 move 步, 則調整步數 move 為 move-2 &前往 2&
如果走到最後發現沒有被走到, 則表示該位置應填入 "-" &stop&
當我們能夠模擬繞行找出每個位置應填入的值之後, 就可以用兩層迴圈遍歷矩陣中所有位置同時印出個位置的值
def turn_right(direction):
if direction=='right':
direction = 'down'
elif direction=='down':
direction = 'left'
elif direction=='left':
direction = 'up'
elif direction=='up':
direction = 'right'
return direction
def goahead(direction, row, col):
if direction=='right':
elif direction=='down':
elif direction=='left':
elif direction=='up':
return row, col
def compute_position(n, i, j):
size: n, row index: i, col index: j
Return element: digit 0-9 or char "-"
c = (n**2+2*n-1)//2
is_first_row = True
direction = 'right'
while move &= 2:
for _i1 in range(1 if is_first_row else 2):
for _i2 in range(move):
row, col = goahead(direction, row, col)
if row==i and col==j:
return (c%10)
direction = turn_right(direction)
move = move - (1 if is_first_row else 2)
is_first_row = False
return '-'
def decimal_spiral(n):
for i in range(n):
for j in range(n):
print(compute_position(n, i, j), end='')
decimal_spiral(7)
我回答過的問題:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以通过递归实现这个算法。
思路:通过递归计算矩阵中所有坐标处所要输出的字符(递归每层只计算一个位置的字符,从中心开始沿数字路径计算)。在当前坐标为下一个输出位置的坐标时输出。多次递归,完成整个矩阵的输出。(比较粗暴)
#include &stdio.h&
const int size = 9;
const int direction = (size-5)/2%2==0 ? 3 : 1; // 0:up, 1:right, 2:down, 3:
const int rotation = 1; // 0:clockwise, 1:counter
typedef struct Position_ {
inline void check_print(char ch, int r, int c) {
if (r == print.r && c == print.c) {
printf("%c", ch);
print.c++;
if (print.c % size == 0) {
printf("\n");
print.c = 0;
print.r++;
char foo(Position position, Position from, Position before_from, Position direction, char hint,
int step = 0, int step_left = 0, int counter = 0) {
if (position.r & 0 || position.c & 0 ||
position.r &= size || position.c &= size)
if (print.r &= size || print.c &= size)
check_print(hint, position.r, position.c);
if (hint == '-')
if (step_left == 0) {
counter++;
if (rotation == 1) { // counter-clockwise
int temp = direction.r - direction.c;
direction.r = direction.r==0 ? temp : 0;
direction.c = direction.c==0 ? temp : 0;
} else { // clockwise
int temp = direction.c - direction.r;
direction.r = direction.r==0 ? temp : 0;
direction.c = direction.c==0 ? temp : 0;
step_left =
if (counter%2 == 0) {
step += 2;
step_left =
to.r = position.r + direction.r;
to.c = position.c + direction.c;
Position after_direction =
Position after_to =
if (step_left-1 == 0) {
if (rotation == 1) { // counter-clockwise
int temp = after_direction.r - after_direction.c;
after_direction.r = after_direction.r==0 ? temp : 0;
after_direction.c = after_direction.c==0 ? temp : 0;
} else { // clockwise
int temp = after_direction.c - after_direction.r;
after_direction.r = after_direction.r==0 ? temp : 0;
after_direction.c = after_direction.c==0 ? temp : 0;
after_to.r += after_direction.r;
after_to.c += after_direction.c;
for (int i=-1; i&2; ++i) {
for (int j=-1; j&2; ++j) {
next.r = position.r +
next.c = position.c +
if (next.r==to.r && next.c==to.c)
if (next.r==from.r && next.c==from.c)
if (next.r==before_from.r && next.c==before_from.c)
if (next.r == after_to.r && next.c == after_to.c)
if (foo(next, from, from, direction, '-') == 0)
check_print(hint, position.r, position.c);
char next_hint = (hint-'0'+1)%10 + '0';
if (foo(to, position, from, direction, next_hint, step, step_left-1, counter) == 0)
check_print(hint, position.r, position.c);
int main() {
Position from, to,
if (direction == 0) {
dir.r = -1;
dir.c = 0;
} else if (direction == 1) {
dir.r = 0;
dir.c = 1;
} else if (direction == 2) {
dir.r = 1;
dir.c = 0;
dir.r = 0;
dir.c = -1;
from.r = to.r = (size+1)%4==0 ? (size+1)/2 : size/2;
from.c = to.c = (size+1)%4==0 ? (size-2)/2 : size/2;
print.r = 0;
print.c = 0;
while (foo(to, from, from, dir, '0', 2, 2, 0) != 0) {
已经修正代码的bug。主要问题有两点:没有自动计算起始方向,中心坐标计算错误(你在问题描述中说是中心为0,我误以为是指矩阵的中点)。
这里难点主要在递归。递归从中间的0开始,沿着数字的方向往外走,并在每层发散到相邻非数字的格子(非数格不发散)。hint是当前层的输出,position是当前层输出对应的坐标。from, before_from, to, after_to分别是前一个数字格,再前一个数字格子,下一个数字格,再下一个数字格的坐标。direction是前进方向,step, step_left, counter均用于计算转向的时机。
另:考虑到stdio里有文件流的操作函数,可以直接打开文件,通过fseek模拟随机随访。(当然这应该不是题者本意)
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。当前位置: >>
c语言题库答案(机考)
题目标题: 1,A-B(彭玉旭) 题目描述: 计算 A-B 的值 输入描述: 输入两个整数 a,b 输出描述: 输出 a-b 的结果 样式输入: 74 样式输出: 3 #include&stdio.h& int main() { int a,b; while (scanf(&%d%d&,&a,&b)!=EOF) printf (&%d&,a-b); return 0; } 题目标题: 2,大小写转换(谌海军) 题目描述: 输入一个长度&20 的字符串, 将其中所有大写字母改为小写字母, 而所有小写字母全部改为 大写字母,其余字符原样输出然后输出。 设计步骤 ①用 scanf 输入字符串; ②用循环判 断字符串中的每个字符是大写还是小写,若是大写要转换成小写,是小写要转换成大写: 大写与小写字母的转换关系是“小写字母=大写字母+32” ③用 printf 输出该字符串。 输入描述: 输入数据为 1 个字符串,可包含键盘上可见的所有字符 输出描述: 输出为 1 个字符串,根据输入数据,将其中的大写字符转换成小写,小写转换成大写,其 余字符不变 样式输入: FG56hj 样式输出: fg56HJ #include&stdio.h& #include&string.h& int main() { char str[20]={0}; int i,l; scanf(“%s,str”); l=strlen(str); for(i=0;i&l;i++) { if(str[i]&='a'&&str[i]&='z') str[i]=str[i]-32; else if(str[i]&='A'&&str[i]&='Z') str[i]=str[i]+32; } puts(str); return 0; } 题目标题: 3,找出最重的苹果(彭玉旭) 题目描述: 小明有 n 个苹果(n&20),每一个苹果都有一定的重量,请找出最重的苹果,并输出该苹果的重量 输入描述: 第一个整数是 n,表示苹果的个数,接下来的 n 个整数是苹果的重量,每个整数之间用空格隔开 输出描述: 最重的苹果的重量 样式输入: 2 45 93 样式输出: 93 #include&stdio.h& int main() { int max=0, scanf(&%d&,&n); while(n--) { scanf(&%d&,&num); if(num&max) max= } printf(&%d&,max); return 0; } 题目标题: 4,函数求解 1/n 的累加(谌海军) 题目描述: 利用自定义函数编写程序,求下面的式子: Y=1+1/2+1/3?? +1/n ( n 的数值由键盘输 入,n&=100) 输入描述: 输入一个正整数 输出描述: 输出为小数,保留小数点后 8 位有效数字。 样式输入: 8 样式输出: 2. #include&stdio.h& int main() { double y=0; int n,i; scanf(&%d&,&n); for(i=1;i&=n;i++) y+=1.0/i; printf(&%.8lf&,y); return 0; } 题目标题: 5,汽水瓶(谌海军) 题目描述: 有这样一道智力题: “某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水 瓶,她最多可以换多少瓶汽水喝?”答案是 5 瓶,方法如下:先用 9 个空瓶子换 3 瓶汽水, 喝掉 3 瓶满的,喝完以后 4 个空瓶子,用 3 个再换一瓶,喝掉这瓶满的,这时候剩 2 个空 瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用 3 个空瓶子换一瓶满 的还给老板。如果小张手上有 n 个空汽水瓶,最多可以换多少瓶汽水喝? 输入描述: 输入为一个正整数 n(1&=n&=100) ,表示空汽水瓶个数。 输出描述: 输出为一个正整数,表示可换汽水的瓶数。 样式输入: 10 样式输出: 5 #include&stdio.h& int main() { int n,count=0,k; scanf(&%d&,&n); while(n&1) { k=n/3+n%3; count+=n/3; n=k; if(n==2) { count++; } } printf(&%d&,count); return 0; } /*也可以两个两个换――*/ #include&stdio.h& / int main() { scanf(&%d&,&n); printf(&%d&,n/2); return 0; } 题目标题: 6,栽树(彭玉旭) 题目描述: 在某食堂门前有 n(n&200)个树坑,编号是从 0~n-1,开始时是没有树的。每个月,园林 工人都会在编号 a~b(0&=a&=b&=n-1)之间栽树(包括 a,b),如果树坑原来有树,则不需要从 新栽树。请计算 4 个月后,食堂门前总共有多少棵树。 输入描述: 第一个整数是 n ,接下来有 8 个整数,分别为每个月栽树的编号。 输出描述: 食堂门前树的总数。 样式输入: 10 12 23 34 45 样式输出: 5 #include&stdio.h& int main() { int tree[200]={0},n,i; scanf(&%d&,&n); int star,end,j; for(i=1;i&5;i++) { scanf(&%d%d&,&star,&end); for(j=j&=j++) tree[j]=1; } int sum=0; for(i=0;i&n;i++) sum+=tree[i]; printf(&%d&,sum); return 0; } 题目标题: 7,密码破译(闫博钊) 题目描述: 某组织欲破获一个外星人的密码,密码由一定长度的字串组成。此组织拥有一些破译此密 码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。 现在就请你编程找出能破译此密码的两个钥匙。 输入描述: 输入第一行为钥匙的个数 N(1≤N≤5000) 输入第二行为密码的长度 以下 N 行为每个钥 匙的长度 输出描述: 若无法找到破译此密码的钥匙,则输出仅 1 行 0 。若找到两把破译的钥匙,则输出有两行, 分别为两把钥匙的编号。若有多种破译方案,则只输出一种即可。 样式输入: 10 80 27 9 4 73 23 68 12 64 92 24 样式输出: 6 7 #include&stdio.h& int main() { int n,l; int x[5000]; scanf(&%d%d&,&n,&l); for(i=0;i&n;i++) scanf(&%d&,&x[i]); for(i=0;i&n-1;i++) for(j=i+1;j&n;j++) if(x[i]+x[j]==l) { printf(&%d\n%d&,i+1,j+1); return 0; } printf(&0&); return 0; } 题目标题: 9,基因编码(闫博钊) 题目描述: 小可可选修了基础生物基因学。教授告诉大家Super Samuel 星球上 Kitty 猫的基因的长度 都是2的正整数次幂 2k (k ≤ 8),全是由两种不同的基因单元组成的。 这两种不同的基因单 元分别记成 0 和 1,于是 Kitty 猫的基因可以写成一个 01 串表达式 S 。为了便于分析和 降低数据存储量,教授发明了 ABC 编码规则。该编码规则是不断地按照 A (若 S 串全是 0) T(S)= B (若 S 串全是 1) CT(S1)T(S2) (否则把 S 串分成两 个等长的子串 S1 和 S2) 对 Kitty 猫基因 01 串表达式 S 进行改写,直至最终被改写成只含 有字符“A” 、 “B” 、 “ C ” 的 符 号 串 。 例 如 T() = CT(0100)T(1011) = CCT(01)T(00)CT(10)T(11) = CCCT(0)T(1)ACCT(1)T(0)B = CCCABACCBAB 请你编写程 序帮助小可可求出 Kitty 猫基因的 ABC 编码以协助教授开展科研工作。 输入描述: 测试数据以一行的形式存放 Kitty 猫基因的 01 串表达式, 字符串长度不超过 500 输出描述: 对应测试数据,以一行的形式输出这个 Kitty 猫基因的 ABC 编码。 样式输入:
样式输出: CCCABACCBAB #include &stdio.h& #include &string.h& void ABC(char str[],int star,int end) { int a=0,b=0,i; for(i=i&i++) { if(str[i]=='0') a++; else if(str[i]=='1') b++; } if(a==end-star) printf(&A&); else if(b==end-star) printf(&B&); else { printf(&C&); ABC(str,star,(star+end)/2); ABC(str,(star+end)/2,end); } } int main() { char str[500],l; gets(str); l=strlen(str); ABC(str,0,l); return 0; } 题目标题: 10,最大公约数(闫博钊) 题目描述: 输入两个整数 a,b(1≤a,b≤100000),请编写程序求出他们的最大公约数。 输入描述: 输入两个整数 a b,用空格隔开 输出描述: 输出对应 a,b 的最大公约数 样式输入: 25 10 样式输出: 5 #include&stdio.h& int gcd(int m,int n)/*经典的最大公约数*/ { if(n==0) return gcd(n,m%n); } int main() { int m,n; scanf(&%d%d&,&m,&n); printf(&%d&,gcd(m,n)); return 0; } 题目标题: 11,大数相加(彭玉旭) 题目描述: a+b 这个程序大家都会做,但是如果 a 和 b 都比较大时该怎么办呢。其实我们可以把输入 一个比较大的数用字符串表示,模拟人工加法方式。 如 123+23 ,一个字符串是 123 另外一 个字符串是 23, 从字符串的最后开始加,得到 146. 结果最大是两个字符串最长的那个值加 1。 现在请你计算两个不超过 30 位的十进制的数的和。 知识点:字符串输入,字符的 0~9 的 加法运算。 提示:字符 0 的 ASCII 是 48,注意进位处理 输入描述: 包行四行,每一行包含不超过 30 个的由 0~9 的字符组成字符串。 输出描述: 第一行加第二行的和以及第三行加第四行的和。每一个和占一行 样式输入: 123 123 123 3 样式输出: 246 126 #include&stdio.h& #include&string.h& int main() { int lena,lenb,i,j,n,t,temp,k,num=2, int c[32]={0}; int a[32]={0},b[32]={0}; char a1[32],b1[32]; count=1; while(num--) { scanf(&%s%s&,a1,b1); lena=strlen(a1); lenb=strlen(b1); if(lena&lenb) k= else k= for(i=0;i&i++) a[i]=a1[lena-i-1]-'0'; for(i=0;i&i++) b[i]=b1[lenb-i-1]-'0'; for(i=0;i&k;i++) { c[i]=a[i]+b[i]+c[i]; c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10; } if(c[k]) k++; for(i=k-1;i&=0;i--) printf(&%d&,c[i]); if(num&=1) printf(&\n&); /*memset(c,0,sizeof(c));/*memset 库函数,在 string.h 里 用来清零的最快办法*/ memset(a,0,sizeof(a)); memset(b,0,sizeof(b));*/ } return 0; } 题目标题: 12,字符串比对(谌海军) 题目描述: 有字符串 a(长度&=100),b(长度&=10),计算 b 串在 a 串中出现的次数。解题思路: 1、用 gets 语句从键盘输入两个字符串赋予 a,b 字符数组; 2、建立两层嵌套循环,外循环至 a 串结束标志为止,内循环至 b 串结束标志为止; 3、内循环中比对 b 串与 a 串的数据,满 足条件时计数,否则 break; 4、所有循环结束后输出计数值。 输入描述: 输入为两个字符串,第一个字符串长度小于 100,第二个字符串长度小于 10; 输出描述: 输出为一个正整数; 样式输入: abcdefghijklmnababcdeabc abc 样式输出: 3 #include&stdio.h& #include&string.h& int main() { char a[100],b[10]; int i,l1,l2,j,k,c,d,cnt=0; scanf(&%s%s&,a,b); int l=strlen(b); char *q=strstr(a,b); while(q!=NULL) { cnt++; q=strstr(q+1,b);//题目的意思不是很懂 要是 ccccccccc cc 这样的话有几个? } printf(&%d&,cnt); return 0 ; } 题目标题: 13,围圈报数(谌海军) 题目描述: 有n (n&=100) 围成一圈, 顺序排号 (从 1 排到 n) 。 从第一个人开始报数 (从 1 报到 m (m&=9)), 凡报到 m 的人退出圈子,问最后留下的是原来第几号的那位?解题思路: 1、定义一个长 度为 100 数组 a,初始化为 0; 2、接收键盘输入值 n,m,数组 a 的前 n-1 个元素赋值为 1~n; 3、建立两层嵌套循环,外循环至退出人数为 n-1 为止,内循环中从 0 循环至 n,将 a 数组中非 0 的数据逢 m 置零,同时记录退出人数; 4、循环全部结束后输出最后留下的 一个 a 数组的非零元素的值。 输入描述: 输入为两个正整数,第一个&=100,第二个&=9; 输出描述: 输出为一个正整数; 样式输入: 100 3 样式输出: 91 /* 数学问题 f[1]=0; f[i]=(f[i-1]+m)%i; (i&1) 都不用存数组 #include &stdio.h& int main() { int n,m,i,s=0; scanf(&%d%d&,&n,&m); for (i=2;i&=n;i++) s=(s+m)%i; printf(&%d\n&,s+1); return 0; }*/ #include&stdio.h& int main() { int i,m,n,exit=0,count=0; int a[100]={0}; scanf(&%d%d&,&n,&m); for(i=0;i&n;i++) a[i]=i+1; i=0; while(n-exit&1) { if(a[i]!=0) count++; if(count==m){ count=0;a[i]=0;exit++;} i++; if(i==n) i=0; } for(i=0;i&n;i++) if(a[i]!=0) printf(&%d&,a[i]); return 0; } 题目标题: 14,星期几?(谌海军) 题目描述: 编一个程序,已知今天是星期几,计算出 n 天后是星期几。要求使用枚举变量。 提示:枚 举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表,可将改整形数 存入枚举变量地址以实现外部赋值的目的。如:enum day{Sun,Mon,Tue,Wed,Thu,Fri,Sat} d1; scanf(&%d&,&d1); 当键盘输入 1 时,相当于将 d1 赋值为 Mon,即 d1=Mon 枚举变量 的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方 式 处 理 ; 如 : char *p[]={ “ Sun ” , “ Mon ” , “ Tue ” ,&Wed&,&Thu&,&Fri&,&Sat&}; printf(&%s&,*(p+2)); 其输出结果为:Tue 输入描述: 输入为两个正整数,第一个数 n(n&=6)表示今天是星期几,第二个数 m(m&=1000),表示求 m 天后是星期几; 输出描述: 输出为一个长度为 3 的字符串,表示星期几的名称; 样式输入: 14 样式输出: Fri #include&stdio.h& int main() {/*表示枚举变量完全看不懂的说――*/ char *p[]={&Sun&,&Mon&,&Tue&,&Wed&,&Thu&,&Fri&,&Sat&}; int m,d; scanf(&%d%d&,&d,&m); printf(&%s&,*(p+(d+m)%7)); return 0; } 题目标题: 15,abc+cba=1333(卜胜贤) 题目描述: 已知 abc+cba=1333, 其中 a,b,c 均为一位数, 编程求出所有满足条件的 a,b,c 所有组合。 (知 识点:控制语句) 输入描述: 无 输出描述: 输出数据为多组,每组两个整形数; 样式输入: 无 样式输出: 123 321 456 654 ?? #include&stdio.h& int main() { int i,a,b,c; for(i=100;i&1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i+c*100+b*10+a==1333) printf(&%d %d%d%d\n&,i,c,b,a); } return 0; } 题目标题: 16,整数各位取奇数(卜胜贤) 题目描述: 将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在 t 中。高位仍在高位,低 位仍在低位。例如,当 s 中的数为: 时,t 中的数为:7531。 (知识点:控制语句、 函数、指针) 输入描述: 输入数据为一个不大于
的整形数; 输出描述: 输出数据为一个不大于
的整形数; 样式输入:
样式输出: 97531 #include&stdio.h& #include&string.h& int main() { char a[15]; gets(a); int i,l=strlen(a); for(i=0;i&l;i++) if((a[i]%2)/*’0’的 ASCII 为 48――*/ printf(&%c&,a[i]); return 0; } 题目标题: 17,四位反序数(卜胜贤) 题目描述: 设N是一个四位数,它的 n 倍恰好是其反序数(例如:123 的反序数是 321) ,编程,输出 一个满足条件的N。 (知识点:控制语句) 输入描述: 输入为一个整形数 n(2&=n&=9) 输出描述: 输出为一个四位数的整形数 样式输入: 9 样式输出: 1089 #include&stdio.h& #include&string.h& int main() { scanf(&%d&,&n); int g,s,b,q,i; for(i=1000;i&10000;i++) { q=i/1000; b=i/100%10; s=i/10%10; g=i%10; if(i*n==q+b*10+s*100+g*1000) printf(&%d&,i); } return 0; } 题目标题: 18,字母翻译(卜胜贤) 题目描述: 编程: 求解下列式中各字母代表的数字并输出 PEAR-ARA=PEA (知识点:控制语句) 输入描述: 无 输出描述: 输出为四个数字,以空格分开,依次为代表 P E A R 的数字; 样式输入: 无 样式输出: 8 7 6 5 /*其实答案是 1089 吧*/ #include&stdio.h& /*每个字母一个数字。 。*/ #include&string.h& int main() { int P,E,A,R,i; for(i=1000;i&10000;i++) { P=i/1000; E=i/100%10; A=i/10%10; R=i%10; if(i-A*100-R*10-A==P*100+E*10+A) printf(&%d %d %d %d&,P,E,A,R); } return 0; } 题目标题: 19,字符串复制(卜胜贤) 题目描述: 有一个字符串,包括 n 个字符。写一个函数,将此字符串从第 m 个字符开始的全部字符复 制成另一个字符串。要求在主函数输入字符串及 m 值并输出复制结果。 (知识点:控制语 句、字符串、指针) 输入描述: 输入为一个字符串(长度小于 80)及一个整形数(小于字符串的实际长度) 输出描述: 输出为一个字符串 样式输入: abcdefghijklmnopqrst 8 样式输出: hijklmnopqrst #include &stdio.h& #include&string.h& int main () { int i,m,n; char str[100]={0},a[100]; gets(str); scanf(&%d&,&m); strcpy(a,str+m-1); /*懒得复制,直接输出*/ printf(&%s\n&,a); return 0; } 题目标题: 20,二维字符数组转换(卜胜贤) 题目描述: 编写函数 fun, 函数的功能是: 将 M 行 N 列的二维数组中的字符数据, 按列的 顺序依次放 到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H H H H 则字符串中的 内容应是: WSHWSHWSH。 (知识点:数组、指针) 输入描述: 输入为一个 3 行 4 列二维字符数组数据 输出描述: 输出为一个长度为 12 的字符数组; 样式输入: ABCD EFGH IJKL 样式输出: AEIBFJCGKDHL #include &stdio.h& #include&string.h& int main () { char a[3][10]; char b[20]={0}; int i,j,k=0; for(i=0;i&3;i++) gets(a[i]); for(j=0;j&7;j+=2) for(i=0;i&3;i++,k++) b[k]=a[i][j]; printf(&%s&,b); return 0; } 题目标题: 21,年龄分组(卜胜贤) 题目描述: 统计各年龄段的人数。N(N=20)个年龄通过键盘输入,并放在 age 数组中;要求函数把 0 至 9 岁年龄段的人数放在 d[0]中,把 10 至 19 岁年龄段的人数放在 d[1]中, 把 20 至 29 岁年龄段 的人数放在 d[2]中, 其余依此类推, 把 100 岁 (含 100)以上年龄的人数都放在 d[10]中。 依次 输出 d[0]至 d[10]。 输入描述: 输入为 20 个正整数; 输出描述: 输出为 11 个正整数; 样式输入: 1 2 11 12 22 23 33 34 44 45 55 56 66 67 68 88 99 100 101 102 样式输出:
#include&stdio.h& int main() { int i,age[20],d[11]={0}; for(i=0;i&20;i++) scanf(&%d&,&age[i]); for(i=0;i&20;i++) { switch(age[i]/10) { case 0: d[0]++; case 1: d[1]++; case 2: d[2]++; case 3: d[3]++; case 4: d[4]++; case 5: d[5]++; case 6: d[6]++; case 7: d[7]++; case 8: d[8]++; case 9: d[9]++; default: d[10]++; } } for(i=0;i&10;i++) printf(&%d &,d[i]); printf(&%d&,d[10]); return 0; } 题目标题: 22, 。分数数列求和(谌海军) 题目描述: 有一个分数数列为: 2/1,3/2,4/3,5/4?? 求出这个数列的前 n(n&=20)项之和,保留小数 点后 4 位。 输入描述: 输入一个整数 n(n&=20) ; 输出描述: 输出为一个小数,保留小数点后 4 位; 样式输入: 5 样式输出: 7.2833 #include &stdio.h& int main() { float s=2.0,t=1.0,result=0; int n,i; scanf(&%d&,&n); for(i=0;i&n;i++) result+=s++/t++; printf(&%.4f&,result); return 0; } 题目标题: 23,杨辉三角形(谌海军) 题目描述: 输出 n 行杨辉三角形,如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ???????? 输入描述: 输入为一个正整数 n 输出描述: 输出为 n 行杨辉三角形; 样式输入: 3 样式输出: 1 11 121 #include&stdio.h& int main() { int i,j,N; scanf(&%d&,&N); int a[100][100]={0}; for(i=0;i&N;i++) {a[i][0]=1; a[i][i]=1;} for(i=2;i&N;i++) for(j=1;j&i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i&N;i++) { for(j=0;j&=i;j++) { printf(&%d&,a[i][j]); if(i!=j) printf(& &); else if(i!=N-1) printf(&\n&); } } return 0; } 题目标题: 24,鞍点(谌海军) 题目描述: 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没 有鞍点。 输入描述: 输入一个 3 行 3 列的二维整形数组; 输出描述: 如果鞍点存在,输出其坐标;否则输出-1;如:鞍点位于第一行第三列,则输出 1 3; 样式输入: 123 456 789 样式输出: 13 #include&stdio.h& int main() { int i,j,a[3][3],t,m,k; for(i=0;i&3;i++) for(j=0;j&3;j++) scanf(&%d&,&a[i][j]); for(i=0;i&3;i++) { t=a[i][0]; for(j=0;j&3;j++) if(a[i][j]&t) m=j; for(k=0;k&3;k++) if(a[i][m]&a[k][m]) if(k==3) printf(&%d %d\n&,i+1,m+1); } } 题目标题: 25,最长单词(谌海军)/*只有当 k 从 0 到 2 全部满足才能到 3*/题目描述: 输入一个字符串,将其中最长的单词输出(不含标点符号) ;如果最长单词的数量有多个, 输出第一个即可;注:大写字母的 ascii 码从 65~90,小写字母的 ascii 码从 97~122; 输入描述: 输入为长度小于 100 的字符串; 输出描述: 输出为长度小于 100 的字符串; 样式输入: Helo!I am chinese,nice to meet you! 样式输出: chinese #include&stdio.h& int main() { char a[100]; int i=0,t=0,max=0,j; gets(a); while(a[i++])/*其实直接判断的是第二个字符,但是没有问题~*/ { if(a[i]&=65&&a[i]&=90 || a[i]&=97&&a[i]&=122) t++; else { if(t&max) {j=i;max=t;} t=0; } } for(i=j-i&j;i++) printf(&%c&,a[i]); return 0; } 题目标题: 26,金额转换(谌海军) 题目描述: 将一个小写的金额数字转换为大写输出提示: 1、注意数字的取值范围; 2、注意连续的 多个零,如:60021 应表示为六万零二十一,而不是六万零千零百二十一; 3、金额的各位 大写采用简体中文:十百千万; 4、数字的大写采用简体中文:零一二三四五六七八九; 输入描述: 输入为一个 5 位数的正整数; 输出描述: 输出为大写的数字; 样式输入: 30001 样式输出: 三万零一 #include &stdio.h& #include &string.h& void strlcat(char *dest, char *source) { char temp[10000]; strcpy(temp, dest); strcpy(dest, source); strcat(dest, temp); } int main() { char input[100]; char *je[]={& 元 &,& 十 &,& 百 &,& 千 &,& 万 &,& 十 &,& 百 &,& 千 &,& 亿 &,& 十 &,& 百 &,& 千 &,& 万 &,& 十 &,&百&,&千&,&万&,&亿&}; char *sz[]={&零&,&一&,&二&,&三&,&四&,&五&,&六&,&七&,&八&,&九&}; /*char *千[]={&角&,&分&,&厘&,&毫&};*/ scanf(&%s&,input); char result[1000] = {0}; char *p = strstr(input, &.&), *q = int pos = 0, k, b = -1, last = 0; if (!q){ q = while(*q) q++; } q--; while(q!=input){ k = *q - '0'; if (0 == k){ if (!b){ strlcat(result, sz[0]); } if (b!=-1) b = 1; }else{ if (pos&4 && last &4) strlcat(result, je[4]); if (pos&8 && last &8) strlcat(result, je[8]); if (pos != 0) strlcat(result, je[pos]); strlcat(result, sz[k]); b = 0;last = } pos++; q--; } k = *q - '0'; if (k != 0){ if (pos & 8 && pos&4 && last &4) strlcat(result, je[4]); if (pos&8 && last &8) strlcat(result, je[8]); if (pos != 0) strlcat(result, je[pos]); if (k != 1 || pos != 1) strlcat(result, sz[k]); } if (k != 0 || pos != 0) strcat(result, je[0]); if (p != NULL){ pos = 0; p++; while(*p){ k = *p - '0'; if (k){ strcat(result, sz[k]); } p++; pos++; } }/*else{ strcat(result, &整&); }*/ printf(&%s&, result); return 0; } 题目标题: 27,查找不同的木棍(彭玉旭) 题目描述: 小明的收集了一些木棍,并测量了每个木棍的长度,记录下来.假设小明有奇数根木棍,只有一 个木棍找不到跟它一样长的另外一根木棍.请编程找出这个没有相同长度的木棍 ,输出它的 长度. 知识点: 排序;或者用异或操作 0 异或 x=x;x 异或 x=0;a 异或 b 异或 c=a 异或(b 异或 c)=(a 异或 b)异或 c=a 异或 c 异或 b (根据描述可知,一连串的异或操作可以进行换位处理。把唯一的那个放到最后,中间就是 0 a a b b c c ?? X 也就得到 X 是多少了 ) 输入描述: 输入包含一个奇数 n(n&30000),然后是 n 个整数,表示每个木棍的长度,并保证只有一根木棍 找不到跟他一样长的木棍. 输出描述: 输出符合条件的木棍的长度 样式输入: 5 22 76 87 76 22 样式输出: 87 #include&stdio.h& int main() { int cas,t,res=0; scanf(&%d&,&cas); while(cas--) { scanf(&%d&,&t); /*无敌的异或操作*/ res^=t; } printf(&%d&,res); return 0; } 题目标题: 28,最长上升子序列数(闫博钊) 题目描述: 一个数的序列 bi,当 b1 输入描述: 第一行输入序列的长度 N(1&=N&=1000)。第二行给出序列中的 N 个整数,这些整数的取值 范围都在 0 到 10000。 输出描述: 输出最长上升子序列的长度 样式输入: 7 1735948 样式输出: 4 #include&stdio.h& int main() { int n,a[1000],b[1000],i,j,max=0; scanf(&%d&,&n); for(i=0;i&n;i++) { scanf(&%d&,&a[i]); b[i]=1;//b 数组用来存数的长度。 } for(i=n-1;i&=0;i--)/*动态规划思想,复杂度 O(n^2)*/ { for(j=i-1;j&=0;j--) { if(a[i]&a[j]&&b[i]&=b[j])//如果后一个数大于前一位数,且后一位数的长度大 于或等于前一位数的长度,b[j]++; b[j]++; } } for(j=0;j&n-1;j++) if(b[j]&max) max=b[j]; printf(&%d&,max); return 0; } 题目标题: 求反顺序数(张然) 题目描述: 输入一个正整数,要求以相反的顺序输出该数。例如输入 12345,输出位 54321 输入描述: 输入一个整数 n, 输出描述: 输出一个反顺序的数 样式输入: 123456 样式输出: 654321 #include&stdio.h& #include&string.h& int main() { char a[20]; gets(a); for(i=strlen(a)-1;i&=0;i--) printf(&%c&,a[i]); return 0; } 题目标题: 求三个整数的最大公约数(杨洁) 题目描述: 对任意三个整数,求它们的最大公约数 输入描述: 三个整数 a,b,c 输出描述: a,b,c 的最大公约数 样式输入: 4 24 32 样式输出: 4 #include&stdio.h& int gcd(int n,int m) { if(m==0) return gcd(m,n%m); } int main() { int x,y,z; scanf(&%d%d%d&,&x,&y,&z); printf(&%d&,gcd(gcd(x,y),z)); return 0; } 题目标题: 在字符串中查找字符(杨洁) 题目描述: 判断字符 ch 是否与 str 所指串中的某个字符相同;若相同,则什么都不做,若不同,则将 其插在串的最后,字符只包含数字和字母。str 可能为空,str 最长为 100. 输入描述: 包含 4 组测试数据,每组测试数据包含 一个字符 ch 一个字符串 str,每组数据占一行 输出描述: 对每组测试输出新的字符串 样式输入: d uwewd样式输出:c uwewd #include&string.h& #include&stdio.h& int main() { int n=4; while(n--) { char str[100], int i=0; scanf(&%c %s%*c&,&ch,str); int l=strlen(str); while(str[i]) if(str[i++]==ch) if(i==l) {str[l]=str[l+1]=0;} printf(&%s\n&,str); } return 0; } 题目标题: 第几天(谌海军) 题目描述: 输入某年某月某日,判断这一天是这一年的第几天?程序分析:以 3 月 5 日为例,应该先 把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,闰年且输入月份大于 3 时需考虑多加一天。 输入描述: 输入为三个整数,分别表示年、月、日; 输出描述: 输出为一个整数,表示输入的年月日为当年的第几天; 样式输入:
样式输出: 1 #include &stdio.h& int main() { int year[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,d,count=0,i; scanf(&%d%d%d&,&y,&m,&d); if(y%4==0&&y%100!=0||y%400==0) year[1]++; for(i=0;i&m-1;i++) count+=year[i]; count=count+d; printf(&%d&,count); return 0; } 题目标题: 字符串移动(谌海军) 题目描述: 将一个字符串向左(向右)移动 n 位,移出的字符放置在串尾(串首) ,形成一个新的字符 串; 输入描述: 输入为一个长度小于 20 的字符串,一个整数 n(-100 输出描述: 输出为移动完成后的字符串; 样式输入: ABCDEFGhijklmn -3 样式输出: DEFGhijklmnABC #include&stdio.h& #include&string.h& int main() { int n,i,k,s; char a[30]; gets(a); scanf(&%d&,&n); l=strlen(a); s=n%k;/*负数同样可以% 只是不可以*/ if(s&0) s=s+l; for(i=l-s;i&l;i++) printf(&%c&,a[i]); for(i=0;i&l-s;i++) printf(&%c&,a[i]); return 0; } 题目标题: 发放奖金(杨鼎强) 题目描述: 某车间按工人加工零件的数量发放奖金,奖金分为五个等级:每月加工零件数 N & 100 者奖 金为 10 元; 100 & = N & 110 者奖金为 30 元; 110 & = N &120 者奖金为 50 元; 120 & = N &130 者奖金为 70 元;N & 130 者奖金为 80 元。 请编程,由键盘输入加工零件数量,显示应发 奖金数。 输入描述: 输入 10 个加工零件数量,数量小于 400. 输出描述: 对每一个加工零件个数,输出应发奖金数,每个奖金数之间用空格隔开 样式输入: 85 85 85 85 85 85 85 85 85 85 样式输出: 10 10 10 10 10 10 10 10 10 10 #include &stdio.h& int a[10]; int main() { int i,k; for(i=0;i&10;i++) scanf(&%d&,&a[i]); for(i=0;i&10;i++) { k=a[i]/10; if(k&10) a[i]=10; else switch(k) { case 10: a[i]=30; case 11: a[i]=50; case 12: a[i]=70; default: a[i]=80; } } printf(&%d&,a[0]); for(i=1;i&10;i++) printf(& %d&,a[i]); return 0; } 题目标题: 电子钟模拟显示(谌海军) 题目描述: 电子钟用四位数字显示时间,从 。每位数字用一个 3*3 的字符('|','_',' ')来显示 如数字 8,用数组表示为{{' ','_',' '},{'|','_','|'},{'|','_','|'}模拟显示如下: _ |_| |_| 要求给出一个 给定的时间,模拟显示出来。提示:设置 10 个 3*3 的数组,初始化为 0~9 的数字模拟显示; 定义一个 3*12 的数组,将 4 个数字对应的矩阵串起来后输出;采用指向二维数组的指针解 此题较为合适; 输入描述: 输入为两个数字,中间用分号隔开,表示需要模拟的时钟;时间十位为零时显示为 0; 输出描述: 输出为一个电子时钟的模拟显示结果; 样式输入: 1:22 样式输出: _ _ _ | | | _| _| |_| ||_ |_ #include&stdio.h& int main() { int a,b,c,d; char str1[10][5]= {& _ &,& &,& _ &,& _ &,& &,& _ &,& _ &,& _ &,& _ &,& _ &}; char str2[10][5]= {&| |&,& |&,& _|&,& _|&,&|_|&,&|_ &,&|_ &,& |&,&|_|&,&|_|&}; char str3[10][5]= {&|_|&,& |&,&|_ &,& _|&,& |&,& _|&,&|_|&,& |&,&|_|&,& _|&}; scanf(&%d:%d&,&a,&c); { b=a%10,a/=10,d=c%10,c/=10; printf(&%s%s%s%s\n&,str1[a],str1[b],str1[c],str1[d]); printf(&%s%s%s%s\n&,str2[a],str2[b],str2[c],str2[d]); printf(&%s%s%s%s\n&,str3[a],str3[b],str3[c],str3[d]); } return 0; } 题目标题: 新式乘法(杨鼎强) 题目描述: 做厌了乘法计算的卡特,有一天突发奇想,自己创作了一种新的乘法运算法则,在这种新 式法则里,X*Y 等于一个取自 X,一个取自 Y 的所有数字对的成绩和。例如;123*45 等于 1*4+1*5+2*4+2*5+3*4+3*5=54。而 X?Y 的限定条件为(1&=A?B&=) ,现在你 的任务是用这种新的乘法法则计算 X*Y 的值。 输入描述: 第 1 行: 2 个用空格隔开的整数:X?Y 输出描述: 第 1 行: 输出 1 个整数,即新的乘法法则下 X*Y 的值 样式输入: 123 45 样式输出: 54 #include&stdio.h& #include&string.h& int main() { char x[20],y[20]; scanf(&%s%s&,x,y); int i,j; int a[20],b[20]; int s=0; for(i=0;i&strlen(x);i++) /*大数加法的雏形*/ for(j=0;j&strlen(y);j++) s+=(x[i]-'0')*(y[j]-'0'); printf(&%d&,s); return 0; } 题目标题: 分割自然数游戏(杨鼎强) 题目描述: 周末强强在家做作业,遇到了这样一道题,找出 N 位(N&8)的自然数中具有下列性质的 数:如果将这个数字从中间开始分割成两部分,然后将这两部分相加,所得到的和的平方, 等于原来那个数的(奇数的时候,中间的那个数字靠前)。从键盘输入 N,直接在屏幕上输出 答案。找不到满足要求的数时候,输出"NO FOUND"。强强想了许久也没想出来,想请 你来帮忙,那么你该如何来帮助他呢? 输入描述: 输入 N 输出描述: 符合条件的 N 位整数 样式输入: 4 样式输出: 01 #include&stdio.h& int main() { int i,k=1,n,m,p=1, scanf(&%d&,&n); for(i=1;i&=n/2;i++) p*=10; for(i=1;i&=n;i++) k*=10; if(n%2)/*测试数据的时候发现, 用 7 的话会超时, 虽然题库用的不是 7, 单这样更快~*/ printf(&%d\n&,k); else { for(i=k/10;i&k;i++) { res=i%p+i/p; if(res*res==i) printf(&%d\n&,i); } } return 0; } 题目标题: 乐乐摘苹果(杨鼎强) 题目描述: 一天乐乐去果园玩,发现一棵苹果树上结出 10 个苹果。乐乐跑去摘苹果。乐乐找到一个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 10 个苹果到地面的高度,以及乐乐把手伸直的时候能够达到的最大高度,请帮乐乐算一下她 能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 输入描述: 输入包括两行数据。第一行包含 10 个 100 到 200 之间(包括 100 和 200)的整数(以厘米 为单位)分别表示 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行 只包括一个 100 到 120 之间(包含 100 和 120) 的整数(以厘米为单位) ,表示乐乐把手伸 直的时候能够达到的最大高度。 输出描述: 输出包括一行,这一行只包含一个整数,表示乐乐能够摘到的果的数目。 样式输入: 100 200 150 140 129 134 167 198 200 111 110 样式输出: 5 #include &stdio.h& int main() { int i,s=0,a[11]; for(i=0;i&11;i++) scanf(&%d&,&a[i]); for(i=0;i&10;i++) if(a[i]&=a[10]+30) s++; printf(&%d&,s); return 0; } 题目标题: 数字游戏(杨鼎强) 题目描述: 小明正在学习 C 语言程序设计,一天小明觉得无聊,便去找小刚玩,小刚给小明出了一道 题,让小明输入一个五位以内的正整数,然后需要做到三件事。首先,判断输入的是几位 数;然后,按序输出其各位数字;最后,逆序输出其各位数字。小明想了很久没有结果, 请你帮帮小明该如何设计。 输入描述: 第 1 行: 输入一个整数 n(0-99999) 输出描述: 第 1 行: 输出的是这个整数的位数第 2 行: 输出的是这个整数最初顺序第 3 行: 输出的是这 个整数逆序输出 样式输入: 98745 样式输出: 5
#include&stdio.h& #include&string.h& int main() { char a[7]; scanf(&%s&,a); int i,l=strlen(a); printf(&%d\n&,l); for(i=0;i&l;i++) printf(&%c%c&,a[i],i!=l-1?' ':'\n'); for(i=l-1;i&=0;i--) printf(&%c&,a[i]); } 题目标题: 车厢重组(杨鼎强) 题目描述: 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职 工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位 置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车 厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编 一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。 (此题就好比数列排 序问题,桥墩相当于一个位置转换装置,一次可以转换相邻两节车厢的顺序,依次转换, 直至所有的车厢号从小到大排列为止。 ) 输入描述: 输入文件有两行数据,第一行是车厢总数 n(不大于 1000) ,第二行是 n 个不同的数表示初 始的车厢顺序。 输出描述: 一个数据,是最少的旋转次数。 样式输入: 4 4321 样式输出: 6 #include &stdio.h& int main() { int a[1000]; int n,i,j,cnt=0,t; scanf(&%d&,&n); for(i=0;i&n;i++) scanf(&%d&,&a[i]); for(i=0;i&n;i++)/*冒泡排序――*/ for(j=0;j&n-i-1;j++) { if(a[j]&a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; cnt++; } } printf(&%d&,cnt); return 0; } 题目标题: 亮亮的随机数(杨鼎强) 题目描述: 亮亮在做一个题,就是用计算机生成了 N 个 1 到 1000 之间的随机整数(N≤100) ,对于其 中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。 然后再把这些数从小到大排序,可是他没有做出来,请你协助亮亮完成“去重”与“排序” 的工作。 输入描述: 输入有 2 行,第 1 行为 1 个正整数,表示所生成的随机数的个数:N 。第 2 行有 N 个用空 格隔开的正整数,为所产生的随机数。 输出描述: 输出也是 2 行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。第 2 行为 M 个用空 格隔开的正整数,为从小到大排好序的不相同的随机数。 样式输入: 10 20 40 32 67 40 20 89 300 400 15 样式输出: 8 15 20 32 40 67 89 300 400 #include&stdio.h& #include&stdlib.h& int cmp(const void *a,const void *b) {return(*(int *)a - *(int *)b);} int main() { int i,k=0,n; int a[100],b[100]; scanf(&%d&,&n); for(i=0;i&n;i++) scanf(&%d&,&a[i]); qsort(a,n,sizeof(a[0]),cmp); /*这个是 std;如果不要求是 c 的话,可以用 c++里面的 sort 至于怎么用,问度娘―― */ for(i=0;i&n;i++) { if(a[i]!=a[i+1]) {b[k]=a[i];k++;} else {b[k]=a[i];i++;k++;} } printf(&%d\n&,k); for(i=0;i&k;i++) { printf(&%d&,b[i]); if(i!=k-1) putchar(' '); } return 0; } 题目标题: 不高兴的津津(杨鼎强) 题目描述: 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈 为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果 一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它 事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排, 看看下周她会不会不高兴;如果会的话,哪天最不高兴。(津津一天上课的时间应分为两部 分:在学校的时间和在复习班的时间,这两个时间相加就是津津一天上课的时间。如果这 个时间大于八小时津津就会不高兴。) 输入描述: 输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于 10 的非负整数, 用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间 输出描述: 输出包括一行,这一行只包含一个数字。如果不会不高兴则输出 0,如果会则输出最不高兴 的是周几(用 1, 2, 3, 4, 5, 6, 7 分别表示周一,周二,周三,周四,周五,周六,周日) 。如 果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。 样式输入: 5 3 6 2 7 2 5 3 5 4 0 4 0 6 样式输出: 3 #include &stdio.h& int main() { int i,a,b,t[10]; for(i=0;i&7;i++) { scanf(&%d%d&,&a,&b); t[i]=a+b; } int max=t[0],x=0; for(i=1;i&7;i++) if(max&t[i]) {max=t[i]; x=i+1;} if(max&8) printf(&0&); else printf(&%d&,x); return 0; } 题目标题: 最低位(二进制的转换)(胡宁静) 题目描述: 任意一个正整数 A(1&=A&=109) ,输出它的最低位。例如,A=26,我们能写出它的二进制 位 11010,所以最低位是 10,输出为 2。再例如,A=88,则二进制位 1011000,则最低位是 1000,输出为 8。 输入描述: 输入包含一个整数 A(1&=A&=109) 输出描述: 对应输入的最低位 样式输入: 8 样式输出: 8 #include &stdio.h& int main() { int a[10]; int i=0,t=0,y=1,j; scanf(&%d&,&n); for(i=0;t==0;i++) { t=n%2; n=n/2; } for(j=0;j&i-1;j++) y*=2; printf(&%d&,y); return 0; } 题目标题: Fibonacci 数列(胡宁静) 题目描述: Fibonacci 数列 {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...} ,可以如下定义: F0=0 F1=1 Fi=F(i-1)+F(i-2) 对于所有的 i 大于 2 写个程序计算 Fibonacci 数 输入描述: 第一行为需要测试个数 T,接着的 T 行,每一行包含一个数 n(0&=n&=45 ) ,即你需要计 算的 F(n) 输出描述: 每输入一个数 n,输出对应的 F(n) 样式输入: 5 0 3 5 9 20 样式输出: 0 2 5 34 6765 #include&stdio.h& #include&string.h& int main() { int n,t,i; int a[50]; a[0]=0; a[1]=1; for(i=2;i&46;i++) a[i]=a[i-1]+a[i-2]; scanf(&%d&,&n); /*前面的操作叫预处理。 。 。省的进行重复计算*/ while(n--) { scanf(&%d&,&t); printf(&%d\n&,a[t]); } return 0; } 题目标题: 蛇形矩阵(胡宁静) 题目描述: 蛇形矩阵是从 1 开始的自然数依次排列成的一个矩阵上三角形 输入描述: 矩阵的大小 N(N&20) 输出描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入: 5 样式输出: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 #include&stdio.h& int main() { int i,j,n; int a[25][25]={1}; scanf(&%d&,&n); for(i=1;i&n;i++) a[i][0]=a[i-1][0]+i; for(i=0;i&n;i++) for(j=1;j&n-i;j++) a[i][j]=a[i][j-1]+i+j+1; for(i=0;i&n;i++) { printf(&%d&,a[i][0]); for(j=1;j&n-i;j++) printf(& %d&,a[i][j]); if(i&n-1) putchar('\n'); } return 0; } 题目标题: 猪的安家(胡宁静) 题目描述: Andy 和 Mary 养了很多猪。他们想要给猪安家。但是 Andy 没有足够的猪圈,很多猪只能 够在一个猪圈安家。举个例子,假如有 16 头猪,Andy 建了 3 个猪圈,为了保证公平,剩 下 1 头猪就没有地方安家了。Mary 生气了,骂 Andy 没有脑子,并让他重新建立猪圈。这 回 Andy 建造了 5 个猪圈,但是仍然有 1 头猪没有地方去,然后 Andy 又建造了 7 个猪圈, 但是还有 2 头没有地方去。Andy 都快疯了。你对这个事情感兴趣起来,你想通过 Andy 建 造猪圈的过程,知道 Andy 家至少养了多少头猪。 输入描述: 输入包含多组测试数据。每组数据第一行包含一个整数 n (n &= 10),表示 Andy 建立猪圈的 次数,接下来 n 行,每行两个整数 ai, bi( bi &= ai &= 1000), 表示 Andy 建立了 ai 个猪圈, 有 bi 头猪没有去处。你可以假定(ai, aj) = 1 输出描述: 输出包含一个正整数,即为 Andy 家至少养猪的数目 样式输入: 3 31 51 72 样式输出: 16 #include&stdio.h& int main() { int n,i=0,j,t=0,a[10],b[10]; scanf(&%d&,&n); for(i=0;i&n;i++) scanf(&%d%d&,&a[i],&b[i]); i=0; while(++i) { for(j=0;j&n;j++) if(i%a[j]==b[j]) t++; else {t=0;} if(t==n) {printf(&%d&,i);} } return 0; } 题目标题: 整数划分(胡宁静) 题目描述: 整数划分是一个经典的问题,希望这道题对你的组合数学有所帮助. 提示 1. 将 5 划分成若 干正整数之和的划分为: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1 2. 将 5 划分成 2 个正整数之和的划分为: 3+2, 4+1 3. 将 5 划分成最大数不超过 2 的划分为: 1+1+1+1+1, 1+1+1+2, 1+2+2 4. 将 5 划分成若干奇正整数之和的划分为: 5, 1+1+3, 1+1+1+1+1 5. 将 5 划分成若干不同整数之和的划分为: 5, 1+4, 2+3 输入描述: 每组输入是两个整数 n 和 k。 (1&=n&=50,1&=k&=n) 输出描述: 对于每组输入,请输出 6 行第一行: 将 n 划分成若干正整数之和的划分数。 第二行: 将 n 划分成 k 个正整数之和的划分数。 第三行: 将 n 划分成最大数不超过 k 的划分数。 第 四行: 将 n 划分成若干奇正整数之和的划分数。 第五行: 将 n 划分成若干不同整数之和 的划分数。 第六行: 打印一个空行 样式输入: 52 样式输出: 7 2 3 3 3 /* 动态规划 dp 问题,网上给的说明很详细了。 第一行和第三行: 对于第一行和第三行,根据状态转移方程很容易写出: dp[i][j] = dp[i][i] j&i 时 = dp[i-j][j]+dp[i][j-1] i&=j 时 i 记录的是该要分的数,j 表示最大数不超过 j 的划分数, 当 j 比 i 还大时当然是只能 j 分 到 i 而已, 当 i&=j 时,注意到 5 = 5 = 4+1 = 3+2 = 3+1+1 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1,5 可以 划分为 +1,而 4 的划分数之前已求出,相当于加上 4 的划分数,即 dp[i][j-1],另外注意到 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1,即还要加上要减的数 5 减掉 2 之后, dp[5][2] = dp[5-2][2]+dp[5][1] = dp[3][2]+1 = dp[3-2][2]+dp[3][1]+1 = dp[1][1]+1+1 = 3; 每次算 dp 时其实都可以先写写 dp 之间的转移关系,弄清楚后,再写出状态转移方程 第二行: 将 n 划分成 K 个正整数之和的划分数。根据第一行和第三行的程序的启发,可以这样 设置 dp 为三维, dp[i][p][j],i 表示要划分的数,p 为要划分的总个数,j 为划分的数中的最大值为不超 过 j,可以得到 以下状态转移方程: dp[i][p][j] = dp[i][p][i] j&i 时 = dp[i-j][p-1][j] + dp[i][p][j-1] 解析一下吧: 当没用到当前最大值 j 时,因为要划分的数和要划分的数的个数都不变, 当用到当前最大值 j 时,因为用到了一个数,所以划分数的总个数减一,并且划分数要 减j 初始化可以是先置零,再 dp[i][1][j] = 1,且当 j&i 时,dp[i][p][j] = dp[i][p][i] 比如例子: dp[5][2][5] = dp[0][1][5]+dp[5][2][4] = 0+dp[1][1][4]+dp[5][2][3] = 1+dp[5][2][3] = 1+dp[2][1][3] = 2,得到结果 第四行: 将 n 划分成若干奇正整数之和的划分数。同样根据一三行的方法做,令 dp[i][j]表示当 前的划 分数为 i,最大值为 j 时的中的划分数,则状态转移方程为 dp[i][j] = dp[i][i] if(j%2==1&&j&i) = dp[i][i-1] if(j%2==0&&j&i) = dp[i-j][j]+dp[i][j-2] 解析一下: 当 j&i 时没什么好说的了,因为最大数不可能为偶数嘛, 当 j&=i 时,如果用到当前最大值,则划分数要减掉当前的 j 值, 如果没用到 j 时,则划分数不变,划分的最大值要减少 2 第五行: 将 n 划分成若干不同整数之和的划分数。其实这个的状态转移方程挺好找的, 同样根据一三的方法就行,dp[i][j] = dp[i][j-1]+dp[i-j][j-1], 解析一下: i 记录的是要划分的数,j 表示当前最大划分到的数中的最大值, 当用到当前的 j 时,划分数 i 要减掉 j,并且因为各个划分数不同,所以 j 还要减掉 1; 当没用到 j 时,j 减一,划分数 i 不变 由此看来,第一行和第三行的代码很重要,其他的都是可以从它得到啊。 。 。 */ #include&stdio.h& #include&string.h& #define X 52 int dp[X][X],dp2[X][X][X],dp3[X][X],dp4[X][X],n,k; int i,j; void f_1_3() { for(i=1;i&X;i++) //初始化 dp[i][0] = 0; dp[0][0] = 1; for(i=0;i&X;i++) //实现状态转移方程 for(j=1;j&X;j++) if(i&=j) dp[i][j] = dp[i-j][j]+dp[i][j-1]; else dp[i][j] = dp[i][i]; } void f_2() { memset(dp2,0,sizeof(dp2)); for(i=1;i&X;i++) //初始化 dp2[i][1][i] = 1; for(i=0;i&X;i++) //初始化 for(j=0;j&X;j++) if(j&i) dp2[i][1][j] = dp2[i][1][i]; for(i=1;i&X;i++) //状态转移 for(int p=2;p&X;p++) for(j=1;j&X;j++) if(j&i) dp2[i][p][j] = dp2[i][p][i]; else dp2[i][p][j] = dp2[i-j][p-1][j]+dp2[i][p][j-1]; } void f_4() { memset(dp3,0,sizeof(dp3)); for(i=1;i&X;i++) //初始化,当最大值为 1 时,只能由 i 自己本身组成,划分数为 1 dp3[i][1] = 1; for(i=1;i&X;i+=2) //涉及到后面的状态转移时 i 会减少到 0,但实际上,当 j 为奇数 时,必须得加 1 dp3[0][i] = 1; dp3[0][0] = 1; //初始化 1 for(i=1;i&X;i++) //实现状态转移方程 for(j=3;j&X;j+=2) { if(j&i) { if(i%2) dp3[i][j] = dp3[i][i]; else dp3[i][j] = dp3[i][i-1]; } else dp3[i][j] = dp3[i-j][j]+dp3[i][j-2]; } } void f_5() { memset(dp4,0,sizeof(dp4)); for(i=1;i&X;i++) //初始化 { dp4[1][i] = 1; dp4[0][i] = 1; } for(i=2;i&X;i++) //状态转移方程 for(j=1;j&X;j++) if(i&j) dp4[i][j] = dp4[i][i]; else dp4[i][j] = dp4[i][j-1]+dp4[i-j][j-1]; } int main() { f_1_3(); f_2(); f_4(); f_5(); while(scanf(&%d%d&,&n,&k)!=EOF) { printf(&%d\n&,dp[n][n]); printf(&%d\n&,dp2[n][k][n]); printf(&%d\n&,dp[n][k]); if(n%2) printf(&%d\n&,dp3[n][n]); else printf(&%d\n&,dp3[n][n-1]); printf(&%d\n\n&,dp4[n][n]); } return 0; } 题目标题: 最大乘积的整数的拆分(胡宁静) 题目描述: 将一个整数 N 分解成各不相同的加数的和,(这个位置有问题。 。 。)使这些加数的乘积最大。 N 范围为[5,1000] 输入描述: 输入一个整数 N(5&=N&=1000) 输出描述: 能够使得积最大的加数序列 样式输入: 7 样式输出: 34 #include &stdio.h& int main() { scanf(&%d&,&n); int i,k,r; k=n/3;/*可以通过数学证明得到,当换分数是自然对数 e 时,成绩最大,因而多划 3,至 于是划 4 还是 2 就看余数是多少了*/ r=n%3; if(r==0) { printf(&3&); for(i=0;i&k-1;i++) printf(& 3&); } if(r==1) { r=4; k--; for(i=0;i&k;i++) printf(&3 &); printf(&4&); } if(r==2) { printf(&2&); for(i=0;i&k;i++) printf(& 3&); } return 0; } 题目标题: 插队(胡宁静) 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插 入到数组中。例如原数组为:1 2 6 7 9,输入待插入的元素 3,则插入完成后结果为: 1 2 3 6 7 9; 输入描述: 输入包含两部分, 第一部分先输入 n, 表示数组中元素个数, 接着输入 n 个已经排序好的数, 数组最大个数 n 为 20,第二部分为待插入的数据 输出描述: 新的排序好的数组元素 样式输入: 5 12679 3 样式输出: 123679 #include&stdio.h& int main() { int a[25],i,j,t,n; scanf(&%d&,&n); for(i=0;i&n;i++) scanf(&%d&,&a[i]); scanf(&%d&,&t); for(i=0;i&n;i++) if(t&a[i]) { for(j=n-1;j&=i;j--) a[j+1]=a[j]; a[i]=t; } printf(&%d&,a[0]); for(i=1;i&=n;i++) printf(& %d&,a[i]); return 0; } 题目标题: 卫星定位(胡宁静) 题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来 (折半查找) 。例如原数组为:1 2 6 7 9,输入待查找的元素 7,则查找结果为 4,如果没有 找到该元素,则输出-1; 输入描述: 输入包含两部分,第一部分先输入 n,表示数组中元素数,接着输入 n 个已经排序好的数, 数组最大个数 n 为 20,第二部分为待查找的数据 输出描述: 待查找的元素位置 样式输入: 5 12679 7 样式输出: 4 #define M 25 #include&stdio.h& int main() { static int a[25]; int i,n,low,mid,high,flag,x; scanf(&%d&,&n); low=0; high=n-1; flag=-1; for(i=0;i&n;i++) scanf(&%d&,&a[i]); scanf(&%d&,&x); while(low&=high) /*老师上课讲的经典算法*/ { mid=(low+high)/2; if (x==a[mid]) { flag=mid+1; } else if (x&a[mid]) low=mid+1; else high=mid-1; } printf(&%d&,flag); return 0; } 题目标题: 警察抓贼(胡宁静) 题目描述: 编写程序,将 n(n&1000)个元素中的某个特定元素删除。如果该元素出现的次数 t 为奇数 次,则删除第(t+1)/2 那个,如果出现的次数 t 为偶数次,则删除第(t/2)个 输入描述: 输入包含两部分,第一部分先输入 n,接着输入 n 个原数据。第二部分为待删除的元素; 输出描述: 删除特定元素后的剩余元素 样式输入: 8
样式输出: 1346536 #include&stdio.h& int main() { int i,t,n,count=0,x,a[1005]; scanf(&%d&,&n); for(i=0;i&n;i++) scanf(&%d&,&a[i]); scanf(&%d&,&x); for(i=0;i&n;i++) if(a[i]==x) count++; t= if(count%2==0) { count=0; for(i=0;i&n;i++) { if(a[i]==x) count++; if(count==t/2) { i++; printf(&%d &,a[i]); } else printf(&%d &,a[i]); } } else { count=0; for(i=0;i&n;i++) { if(a[i]==x) count++; if(count==(t+1)/2) { i++; printf(&%d &,a[i]); } else printf(&%d &,a[i]); } } return 0; } 题目标题: 是非黑白(胡宁静) 题目描述: 编写函数实现两个等长字符串大小比较。比较规则如下:字符大小按对应的 ASCII 码值, 字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止 比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个 字符串则输出第二个字符串,如果大于则输出第一个字符串,如果相等则返回 0; 输入描述: 输入待比较的两个字符串 输出描述: 字符串比较结果 样式输入: abcdefg abcdeff 样式输出: abcdefg #include&stdio.h& #include&string.h& int main() { char s1[200],s2[200]; gets(s1); gets(s2); flag=strcmp(s1,s2); if(flag&0) puts(s2); else if(flag&0) puts(s1); return 0; } 题目标题: 搭桥(胡宁静) 题目描述: 编写函数将两个升序排列的字符串融合成一个字符串,融合后的字符串仍然是升序排列的。 输入描述: 输入两升序字符串 输出描述: 融合后的字符串 样式输入: acefi bdfg 样式输出: abcdeffgi #include&stdio.h& #include&string.h& int main() { char a[55],b[55],c; int i,j,l; gets(a); gets(b); strcat(a,b);/*融合后排序、 、 、*/ l=strlen(a); for(i=0;i&l;i++) for(j=i+1;j&l;j++) { if(a[i]&a[j]) { c=a[i]; a[i]=a[j]; a[j]=c; } } puts(a); return 0; } 题目标题: 一清二楚(胡宁静) 题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他 字符出现的频率。 (注意,其他字符包含空格) 输入描述: 一混合字符串,最大长度为 200 各类字符出现频率 输出描述: 各类字符出现频率 样式输入: abcdefg9999//// 样式输出: ch:7 num:4 other:4 #include&stdio.h& #include&string.h& int main() { char a[205]={0}; gets(a); /*不用 scanf,有空格的要用 gets*/ int i,l=strlen(a),ch=0,num=0,other=0; for(i=0;i&l;i++) { if(a[i]&='a'&&a[i]&='z'||a[i]&='A'&&a[i]&='Z') ch++; else if(a[i]&='0'&&a[i]&='9') num++; else other++; } printf(&ch:%d\nnum:%d\nother:%d&,ch,num,other); return 0; } 题目标题: 克隆(胡宁静) 题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于 100),将第一个字符串拷贝到第 二个字符串中; 如果第一个字符串的长度 a 小于第二个字符串长度 b, 则第二个字符串的长 度也将缩减至第一个的长度 a,如果第一个字符串的长度 a 大于或等于第二个长度 b,则只 将 a 的前 b 个字符拷贝到第二个中; 输入描述: 输入两字符串 输出描述: 输出第二个字符串,注意:输出不换行。 样式输入: Abdfeg Bdfad 样式输出: Abdfe #include&stdio.h& #include&string.h& int main() { char a[105],b[105]; int l1,l2,i; gets(a); gets(b); l1=strlen(a); l2=strlen(b); if(l1&=l2) { for(i=0;i&l2;i++) b[i]=a[i]; b[i+1]=0; } else { for(i=0;i&l1;i++) b[i]=a[i]; b[i+1]=0; } for(i=0;i&(l1&l2?l2:l1);i++) printf(&%c&,b[i]); return 0; } 题目标题: 四则运算程序(甘正佳) 题目描述: 编制一个完成两个数的四则运算程序(加、减、乘、除)。如:用户输入 34+56 则输出结果 34.00+56.00=90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。 数字可能是整数,也可能是浮点数。 知识点:格式输出,格式输入,条件语句 输入描述: 包含 5 组测试数据,每一组占一行,每一行包含数字和字符,运算结果不超过 double 范围。 输出描述: 两个数的运算的结果,如果运算符不为加、减、乘、除,则输出 Input Error! 每个数字保 留两位小数精度。 样式输入: 1+1 1-1 1*1 1/1 1^1 样式输出: 1.00+1.00=2.00 1.00-1.00=0.00 1.00*1.00=1.00 1.00/1.00=1.00 Input Error! #include&stdio.h& int main() { double x,y; int n=5; while(n--) { scanf(&%lf%c%lf&,&x,&ch,&y); if(ch=='+') printf(&%.2lf%c%.2lf%=%.2lf&,x,ch,y,x+y); else if(ch=='-') printf(&%.2lf%c%.2lf%=%.2lf&,x,ch,y,x-y); else if(ch=='*') printf(&%.2lf%c%.2lf%=%.2lf&,x,ch,y,x*y); else if(ch=='/') printf(&%.2lf%c%.2lf%=%.2lf&,x,ch,y,x/y); else printf(&Input Error!&); if(n!=0) putchar('\n'); } return 0; } 题目标题: 矩阵计算(甘正佳) 题目描述: 求一个 3*3 矩阵对角线元素之和。 输入描述: 按行输入 9 个整数。 输出描述: 对角线元素之和 样式输入:
样式输出: 15 #include&stdio.h& int main() { int a[3][3]; int i,j; for(i=0;i&3;i++) for(j=0;j&3;j++) scanf(&%d&,&a[i][j]); printf(&%d&,a[0][0]+a[1][1]+a[2][2]); return 0; } 题目标题: 字符串加密(甘正佳) 题目描述: 对键盘输入的英文名句子进行加密。加密方法为,当内容为英文字母时其在 26 字母中的其 后三个字母代替该字母,若为其它字符时不变。 输入描述: 一行字符串,字符串长度小于 200 输出描述: 加密后的字符串。 样式输入: abcde 样式输出: defgh #include&stdio.h& int main() { char a[205]; gets(a); int i,l; for(i=0;a[i];i++) { if(a[i]&='a'&&a[i]&='w'||a[i]&='A'&&a[i]&='W') a[i]+=3; else if(a[i]=='x'||a[i]=='z'||a[i]=='y') a[i]-=23; printf(&%c&,a[i]); } return 0; } 题目标题: 落体球反弹(甘正佳) 题目描述: 一球从某个高度(大于等于 100 米)自由落下,每次落地后反跳回原高度的一半;再落下, 求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?。 (保证 6 位精度) 输入描述: 高度为大于等于 100 米的实数,范围在 double 内。 输出描述: 第 10 次落地时,经过多少米,第 10 次反弹高度。 样式输入: 100 样式输出: 299..097656 #include&stdio.h& #define MAX 10 int main() { int n,i; double m,sn, scanf(&%lf&,&m); sn=m; hn=sn/2; for(i=2;i&=MAX;i++) { sn+=hn*2; hn/=2; } printf(&%lf\n%lf&,sn,hn); return 0; } 题目标题: 数制转换(甘正佳) 题目描述: 将一个由八进制数字字符组成的字符串转换为与其数值相等的十进制整数。规定输入的字 符串最多只能包含 5 位八进制数字。 输入描述: 一个八进制数,包含不超过 5 个 0~7 字符 输出描述: 相应的十进制数 样式输入: 11 样式输出: 9 #include&stdio.h& #include&string.h& int f(int n) { int s=1; while(n--) s*=8; } int main() { char a[10]; int i,j,l,sum=0; gets(a); l=strlen(a); for(i=l-1,j=0;i&=0;i--,j++) sum+=(a[i]-'0')*f(j); printf(&%d&,sum); return 0; } 题目标题: 电话薄管理(甘正佳) 题目描述: 利用结构体类型数组输入五位用户的姓名和电话号码,按姓名的字典顺序排列后(姓名相 同保持原位置) ,输出用户的姓名和电话号码。 已知结构体类型如下: struct user { char name[20]; char num[10]; }; 输入描述: 输入姓名字符串和电话号码字符串。 输出描述: 输出按姓名排序后的姓名字符串和电话号码字符串。每行的最后一个字符后不能有空格 .所 有输出的最后一行不能有回车 样式输入: aa 12345 dd 23456 cc 34567 bb 21456 ee 12456 样式输出: aa 12345 bb 21456 cc 34567 dd 23456 ee 12456 #include&stdio.h& #include&string.h& struct user { char name[50]; char num[20]; }; int main() { struct user a[5],t; for(i=0;i&5;i++) scanf(&%s%s&,a[i].name,a[i].num); int j,k; for(i=0;i&4;i++) { k=i; for(j=i+1;j&5;j++) if(strcmp(a[k].name,a[j].name)&0) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } for(i=0;i&4;i++) printf(&%s\n%s\n&,a[i].name,a[i].num); printf(&%s\n%s&,a[4].name,a[4].num); return 0; } 题目标题: 校门外的树(杨鼎强) 题目描述: 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以 把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 L 的位置;数轴上的每个整 数点,即 0,1,2,??,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些 区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是 整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树) 移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。 输入描述: 输入的第一行有两个整数 L (1 &= L &= 10000) 和 M (1 &= M &= 100) , L 代表马路的长度, M 代表区域的数目,L 和 M 之间用一个空格隔开。接下来的 M 行每行包含两个不同的整 数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出描述: 输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。所有输出的最后一 行不能有回车 样式输入: 500 3 150 300 100 200 470 471 样式输出: 298 #include&stdio.h& int main() { int a[10005]={0}; int n,i,L; scanf(&%d%d&,&L,&n); int x,y; while(n--) { scanf(&%d%d&,&x,&y); for(i=x;i&=y;i++) a[i]=1; } int sum=0; for(i=0;i&=L;i++) sum+=a[i]; printf(&%d&,L+1-sum); return 0; } 题目标题: 歌手比赛(甘文) 题目描述: 青年歌手参加歌曲大奖赛, 有 10 个评委对她的进行打分, 试编程求这位选手的平均得分 (去 掉一个最高分和一个最低分) 。 输入描述: 10 个评委的分数,每个分数是一个浮点数.输入数据保证有一个最低分,一个最高分,且最高分, 最低分不相同.其它是数据与最低、最高均不相同 输出描述: 输出歌手的得分,保留一位小数.所有输出的最后一行不能有回车 样式输入: 8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2 样式输出: 8.8 #include&stdio.h& int main() { double a[10],max,min, for(i=0;i&10;i++) scanf(&%lf&,&a[i]); sum=min=max=a[0]; for(i=1;i&10;i++) { if(max&a[i]) max=a[i]; if(min&a[i]) min=a[i]; sum+=a[i]; } printf(&%.1lf&,(sum-min-max)/8); return 0; } 题目标题: 魔幻矩阵(甘文) 题目描述: 输入一个整数 n, 输出一个特殊排列的矩阵, 如 n=5 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 该矩阵我们称为魔幻矩阵. 输入描述: 输入一个整数 n(1&=n&100) 输出描述: 输出相应的魔幻矩阵,每一个数据之间用一个空格隔开 ,但每行的最后一个数据后不能有空 格.所有输出的最后一行不能有回车 样式输入: 5 样式输出:
11111 #include&stdio.h& int main() { int a[100][100]; int n,i,j, scanf(&%d&,&n); for(k=0;k&(n+1)/2;k++) /*四个循环,k 控制层数*/ { for(i=k,j=k;i&n-1-k;i++) a[i][j]=k+1 ; for(j=k;j&n-1-k;j++) a[i][j]=k+1 ; for(;i&k;i--) a[i][j]=k+1 ; for(;j&k;j--) a[i][j]=k+1 ; } a[n/2][n/2]=(n+1)/2; for(i=0;i&n;i++) { printf(&%d&,a[i][0]); for(j=1;j&n;j++) printf(& %d&,a[i][j]); if(i!=n-1)putchar('\n'); } return 0 ; } 题目标题: 计算天数(彭纪良) 题目描述: 给出年、月、日,计算该日是该年的第几天?注意闰年的问题 输入描述: 输入三个整数分别表示年、月、日 输出描述: 按年/月/日格式输出该日期是该年的第几天。所有输出的最后一行不能有回车 样式输入:
样式输出: 274 #include&stdio.h& int main() { int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int y,d,n,i,k,sum=0; scanf(&%d %d %d&,&y,&k,&d); if(y%4==0&&y%100!=0||y%400==0) /*这个记一下吧,很常用*/ m[2]++; for(i=1;i&k;i++) sum+=m[i]; sum+=d; printf(&%d&,sum); return 0; } 题目标题: 统计字母字符出现的次数(彭纪良) 题目描述: 输入一行字符,统计该字符串中‘a’到‘z’26 个字母各自出现的次数,结果保存在数组 s 中。 (注:不区分大小写,只统计字母字符) 输入描述: 输入一个字符串,字符串长度不超过 400。 输出描述: 按每行 5 个答案的排列分别将 26 个字母各自出现的次数输出来. 每一个数据之间用一个空 格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入: asAS123 样式输出: a=2 b=0 c=0 d=0 e=0 f=0 g=0 h=0 i=0 j=0 k=0 l=0 m=0 n=0 o=0 p=0 q=0 r=0 s=2 t=0 u=0 v=0 w=0 x=0 y=0 z=0 #include&stdio.h& #include&string.h& int main() { int num[26]={0},i; char a[500]; gets(a); for(i=0;i&strlen(a);i++) { if(a[i]&='A'&&a[i]&='Z') num[a[i]-'A']++; if(a[i]&='a'&&a[i]&='z') num[a[i]-'a']++; } for(i=0;i&26;i++) { printf(&%c=%d&,'a'+i,num[i]); if((i+1)%5==0) printf(&\n&); else if(i!=25) printf(& &); } return 0 ; } 题目标题: 字符串连接(彭纪良) 题目描述: 将 s 所指字符串的正序和反序进行连接,形成一个新串放在 t 所指的数组中。 输入描述: 输入一个字符串,长度不超过 30。 输出描述: 顺序输出该字符串及它的反序序列.所有输出的最后一行不能有回车 样式输入: asQ1] 样式输出: asQ1]]1Qsa #include&stdio.h& #include&string.h& int main() { char a[35],t[70]; int i,j,l; gets(a); l=strlen(a); strcpy(t,a); for(i=l,j=l-1;j&=0;i++,j--) t[i]=a[j]; t[2*l]=0; printf(&%s&,t); return 0; } 题目标题: 用 m 个连续奇数之和表示 m 的立方(彭纪良) 题目描述: 任何一个自然数 m (m&0)的立方均可写成 m 个连续奇数之和。例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 编程实现: 输入一自然数 n, 求组成 n3 的 n 个连续奇数。 输入描述: 输入一个自然数 n(100&n&0) 输出描述: 输出组成 n 的立方的 n 个连续奇数,中间用空格搁开.每一个数据之间用一个空格隔开,但每行 的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入: 3 样式输出: 7 9 11 #include&stdio.h& int main() { int n,i,m; scanf(&%d&,&n); m=(n*n-n)/2; for(i=1;i&2*n-1;i+=2) printf(&%d &,2*m+i); printf(&%d&,2*m+i); return 0; } 题目标题: 二维数组转置(彭纪良) 题目描述: 编程实现使给定的一个 N×M 的二维整型数组转置,即行列互换。 输入描述: 第一行是两个整数 N 和 M ,接下来 N 行整数,每行包含 M 个整数。整数之间用空格隔开 输出描述: 输出转置后的二维整型数组 .每一个数据之间用一个空格隔开,但每行的最后一个数据后不 能有空格.所有输出的最后一行不能有回车 样式输入: 23 123 456 样式输出: 14 25 36 #include&stdio.h& int main() { int m,n,a[20][20]; int i=0,j=0 ; scanf(&%d%d&,&m,&n); for(i=0;i&m;i++) for(j=0;j&n;j++) scanf(&%d&,&a[i][j]); for(i=0;i&n;i++){ for(j=0;j&m;j++){ printf(&%d&,a[j][i]); if(j!=m-1) printf(& &); } if(i!=n-1) printf(&\n&); } return 0 ; } 题目标题: 魔方矩阵(彭纪良) 题目描述: 输入一奇数 n(n&20) ,打印出 1-&n*n 构成的魔方矩阵。 魔方矩阵的行列及对角线的和都 相等。 输入描述: 输入一奇数 n(n&20) 输出描述: 打印出 1-&n*n 构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后 不能有空格.所有输出的最后一行不能有回车 样式输入: 3 样式输出: 816 357 492 #include&stdio.h& #include&string.h& int main() { int a[22][22]={0}; scanf(&%d&,&n); int i,j, i=0;j=(n+1)/2; if(n%2) { for(key=1;key&=n*n;key++) { if(key%n==1) i++; else { i--; j++; } if(i==0) i=n; if(j&n) j=1; a[i][j]= } for(i=1;i&=n;i++) { for(j=1;j&=n;j++) { if(j==n) printf(&%d&,a[i][j]); else printf(&%d &,a[i][j]); } if(i&n) printf(&\n&); } } return 0; } 题目标题: 破解密码(彭玉旭) 题目描述: 小明和小王为了保护他们之间的秘密,约定把所发送的消息进行加密,然而不幸的是小明 的电脑坏了,解密程序不见了,但是他记得小王是如何加密和传递的,现在请你帮他实现 这个程序。 消息加密的过程如下: 1 用数字 0~26 分别表示空格和字母 A~Z 。 对应关系为。 = 0, A = 1, B = 2, C = 3, ..., Y = 25, Z = 26 2 每一个数字用 5 个二进制表示并按一定顺序排列 到某个 RxC 的矩阵中, 如果矩阵元素多于二进制的个数, 则后面的补零处理。 比如 ACM, A = 00001, C = 00011, M = 01101。 3 消息只由空格和字母 A~Z 组成。 排列方式是沿着矩阵四周逐渐向里前进。编码后按行的顺序发送出去。上例中的发送序列 是 10 1100 输入描述: 第一行是一个整数 n(1&=n&1000) ,表示测试用例的个数。接下来的 n 行,每一行第一个 数字是矩阵的行数 R, 然后是空格,接着是矩阵的列数 C ,空格以及二进制字符串。 1&=R,C&=20。 输出描述: 对每个测试用例,输出测试用例的编号(从 1 开始算) ,空格以及解码后的信息(必须放弃 信息部分尾部多余的空格) 。 样式输入: 4 4 4
5 5 0 样式输出: 1 ACM 2 HI 3

我要回帖

更多关于 matlab求矩阵最大值 的文章

 

随机推荐